# XML mit dom4j



## günterk (9. September 2004)

Hallo zusammen, 

ich arbeite micht gerade in xml mit java ein. 
Irgendwann bin ich auf dom4j gestoßen und das schien mir sehr brauchbar zu sein, vor allem die Navigation mit Xpath. 
Habe mir also die do4j.jar in mein Projekt eingebunden, alles kein problem. 
Aber irgendwas fehlt mir wohl noch zu einem Glück. 
Wenn ich das ganze jetzt versuche bekomme ich: 
java.lang.NoClassDefFoundError: org/jaxen/JaxenException

ich brauche wohl noch die jaxen jar, wenn ich das richtig sehe!? die ist aber nicht zu bekommen, sourceforge spuckt sie mir nicht aus. 
kann mir jemand erzählen woher ich die bekomme? 

merci

günter


----------



## Valentin- (10. September 2004)

http://jaxen.sourceforge.net/releases.html 

dort kann man sie meines erachtens herunterladen. Funktioniert bei mir
zumindest!


----------



## Thomas Darimont (10. September 2004)

Hallo!



> Irgendwann bin ich auf dom4j gestoßen und das schien mir sehr brauchbar zu sein, vor allem die Navigation mit Xpath.



XPath funktioniert auch mit normalen Standard Java 
Schau dir mal die Klasse XPathAPI an.

Gruß Tom


----------



## günterk (10. September 2004)

> _Original geschrieben von Thomas Darimont _
> *Hallo!
> 
> XPath funktioniert auch mit normalen Standard Java
> ...



Ok, was brauche ich denn nun um mit java, xml und xpath zu arbeiten? 
Wie gesagt, ich stolpere über die fehler meldung und weiß nicht recht was sie mir sagen will
günter


----------



## Christian Fein (10. September 2004)

> _Original geschrieben von günterk _
> *Ok, was brauche ich denn nun um mit java, xml und xpath zu arbeiten?
> Wie gesagt, ich stolpere über die fehler meldung und weiß nicht recht was sie mir sagen will
> günter *



Die Meldung besagt das er die _Klasse org.jaxe.JaxenException nicht im Classpath  finden kann. 
java.lang.NoClassDefFoundError: org/jaxen/JaxenException.

Schau nochmals nach ob die richtige Jar wirklich im Classpath ist. 

Sprich untersuch die Jar (mit Winzip/WinRAR) und schau ob die Klasse JaxenException in dieser jar wirklich vorhanden ist.


----------



## günterk (10. September 2004)

So, jetzt läuft es, musste noch zwei jars einbinden. 
danke


----------



## Thomas Darimont (10. September 2004)

Hallo!

Prinzipiell reicht ein Java SDK >= 1.4.0, dort sind nämlich schon ein ganzer Haufen von XML Prozessoren / Parser integriert.

Bei mur unter J2SDK 1.4.2 läst sich XPath so verwenden:

```
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class XMLTest1 {

	public static void main(String[] args) {
		//J2SDK 1.4.2
		...
		Document doc = ....;
		NodeList list = XPathAPI.selectNodeList(doc,"/abc/def/*");
		...
	}
}
```

Unter JDK 5.0 ist folgendes möglich:

```
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XPathTest {

	public static void main(String[] args) {

		try {
			DocumentBuilderFactory docFactory =
				DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = docFactory.newDocumentBuilder();
			Document doc = builder.parse(new File("./Test.xml"));

			XPathFactory factory = XPathFactory.newInstance();
			XPath xpath = factory.newXPath();

			NodeList nodeList =
				(NodeList) xpath.evaluate(
					"/abc/def/*",
					doc,
					XPathConstants.NODESET);

			int size = nodeList.getLength();
			for (int i = 0; i < size; i++) {
				Node node = nodeList.item(i);
				System.out.println(node.getTextContent());
			}

		} catch (XPathExpressionException e) {
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}
```

Hier die dazu passende XML Datei:

```
<?xml version="1.0"?>
<abc>
   <def>
      <ghi>User</ghi>
      <ghi>Helfen</ghi>
      <ghi>Usern</ghi>
   </def>
</abc>
```

Gruß Tom


----------



## Thomas Darimont (10. September 2004)

Hier mal noch ein anderes Anwendungsbeispiel:
http://www.tutorials.de/tutorials170960.html

Gruß Tom


----------

