# java+xml mit dom4j



## gwaan (17. Oktober 2005)

Hi Leute,

evtl. kann mir ja jemand helfen. Ich bekam die Aufgabe gestellt mit Java und mit dom4j eine xml Datei einzulesen und das erste Element des xml Baumes auszugeben. Um ehrlich zu sein bin ich damit echt überfordert. hab es soweit geschafft die dom4j.jar in mein projekt einzubinden aber Quelltext mäßig kam ich nicht zurecht auch nicht mit den Anleitungen auf dom4j.org.

Vielleicht weiß jemand wo es ein gelungenes Tutorial gibt oder kann mir irgendwie anders helfen.

Besten Dank 
Grüße gwaan


----------



## teppi (17. Oktober 2005)

Huhu,

Hier ein wenig Code um ein Dokument einzulesen .. Musste halt mal schauen, was das Documentobjekt so für Methoden zur Verfügung stellt. 


```
/*
 *  Einfacher DOM-Parser ohne Ausgabe
 */

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory;  
import javax.xml.parsers.FactoryConfigurationError;  
import javax.xml.parsers.ParserConfigurationException;
 
import org.xml.sax.SAXException;  
import org.xml.sax.SAXParseException;

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

import org.w3c.dom.*;
import org.w3c.dom.DOMException;

public class DomEcho01a{
    // Global value so it can be ref'd by the tree-adapter
    static Document document;

    public static void main(String argv[])
    {
        if (argv.length != 1) {
          System.err.println("Usage: java DomEcho filename");
          System.exit(1);
        }

        DocumentBuilderFactory factory =
            DocumentBuilderFactory.newInstance();
        factory.setValidating(false);
        //factory.setNamespaceAware(true);
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            document = builder.parse( new File(argv[0]) );
            // Nun kann man mit dem Dokument arbeiten
            NodeList liste = document.getElementsByTagName("firmenname");
            for (int i=0; i<liste.getLength(); i++) {
                Node node = liste.item(i);
                System.out.print(node.getNodeName()+": ");
                System.out.println(node.getFirstChild().getNodeValue());
            }

        } catch (SAXParseException spe) {
           // Error generated by the parser
           System.out.println("\n** Parsing error"
              + ", line " + spe.getLineNumber()
              + ", uri " + spe.getSystemId());
           System.out.println("   " + spe.getMessage() );

           // Use the contained exception, if any
           Exception  x = spe;
           if (spe.getException() != null)
               x = spe.getException();
           x.printStackTrace();
 
        } catch (SAXException sxe) {
           // Error generated during parsing)
           Exception  x = sxe;
           if (sxe.getException() != null)
               x = sxe.getException();
           x.printStackTrace();

        } catch (ParserConfigurationException pce) {
            // Parser with specified options can't be built
            pce.printStackTrace();

        } catch (IOException ioe) {
           // I/O error
           ioe.printStackTrace();
        }
    } // main
}
```


----------



## Thomas Darimont (17. Oktober 2005)

Hallo!

 Schau mal hier:

```
/**
  * 
  */
 package de.tutorials;
 
 import java.io.File;
 import java.util.Iterator;
 
 import org.dom4j.Document;
 import org.dom4j.Element;
 import org.dom4j.io.SAXReader;
 
 /**
  * @author Tom
  * 
  */
 public class Dom4JExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception {
 		SAXReader saxReader = new SAXReader();
 		Document document = saxReader.read(new File("c:/example.xml"));
 		//Erstes element
 		Element rootElement = document.getRootElement();
 		
 		//...der Rest
 		System.out.println(rootElement.getName());
 		for (Iterator iter = rootElement.elementIterator(); iter.hasNext();) {
 			Element element = (Element) iter.next();
 			System.out.println(element.getName());
 			for (Iterator innerIter = element.elementIterator(); innerIter
 					.hasNext();) {
 				Element innerElement = (Element) innerIter.next();
 				System.out.println(innerElement.getName());
 
 			}
 		}
 	}
 
 }
```
 
 Example.xml:

```
<?xml version="1.0" encoding="UTF-8"?> 
 <a>
    <b>bbbb</b>
    <c>
 	  <d>ddddd</d>
    </c>
 </a>
```
 
 Siehe auch:
http://www.dom4j.org/guide.html

 Gruß Tom


----------



## gwaan (18. Oktober 2005)

Ihr Jungs seid echt der hammer! Vielen Dank für die schnelle Antwort. Funktioniert perfekt.
@Thomas Darimont hast du das extra für mich geschrieben? wenn ja danke für die mühe! wenn nein wüsste ich gerne die quelle und wo es noch mehr davon gibt! ;-) beispielsweise das schreiben,erstellen, darstellung.

Eine Funktionsübersicht hab ich hier gefunden http://www.dom4j.org/apidocs/index.html

Vielen Dank nochmal, so macht es echt Spaß

Grüße gwaan


----------



## Thomas Darimont (18. Oktober 2005)

Hallo!



> @Thomas Darimont hast du das extra für mich geschrieben? wenn ja danke für die mühe!


 ja und keine Ursache.

 Gruss Tom


----------

