home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

XML und Dom4J

Dom4j ist eine Programmierschnittstelle für Java für den Zugriff und die Verarbeitung von XML-Dokumenten.

Ein neues Dokument wird mit dem DocumentHelper erzeugt über die statische Methode createDocument(). Auf diesem Dokument kann über addElement() ein neues Wurzelelement hinzugefügt werden. Diese Methode liefert dabei den erzeugten und angehängten Knoten als org.dom4j.Element zurück. Auf diesem Element können wiederrum Kindknoten angehängt werden mit der Methode addElement(). Mit den Methoden addText(String) und addAttribute(String, String) können Werte zwischen den Tags eingetragen werden und dem Element Attribute zugewiesen werden. Bei der Methode addAttribute() wird als erster Übergabeparameter der Name des Attributs und als Zweiter den Wert des Attributs angegeben.

public Document createDocument(){
    Document document = DocumentHelper.createDocument();
    Element wurzel = document.addElement("Freizeit-Semester-3");
    Element student1 = wurzel.addElement("Christopher");
    Element hobby1 = student1.addElement("Hobby");
    hobby1.addText("Lernen-und-Bueffeln");
    hobby1.addAttribute("id""1");
    Element hobby2 = student1.addElement("Hobby");
    hobby2.addText("Programmieren");
    hobby2.addAttribute("id""2");
    
    
    Element stundent2 = wurzel.addElement("Simon");
    
    return document;
  }

Die Klasse org.dom4j.Document stellt nur eine Baumstruktur dar, in der Elemente und eventuell ihre Werte stehen, dies ist noch keine XML-Datei. Mit Hilfe des org.dom4j.io.XMLWriter kann aber nun aus einem Document eine XML-Datei geschrieben werden.

XMLWriter writer;
    try {
      writer = new XMLWriter(new FileWriter("z:\\freizeit.xml"));
      writer.write(document);
      writer.flush();
      writer.close();
    catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

Es besteht die Möglichkeit dem XMLWriter ein OutputFormat zu übergeben. Dabei wird dann die XML-Datei schön formatiert und nicht der Inhalt einfach aneinander gehängt. Dafür muss man dem XMLWriter im Konstruktor ein OutputFormat übergeben, dabei gibt es schon default Formatierungen.

OutputFormat format = OutputFormat.createPrettyPrint();

XMLWriter writer = new XMLWriter(new FileWriter(path), format);

 

Wenn kein leeres Document erzeugt werden soll, sonder ein Document das bereits mit Inhalt aus einem String gefüllt sein soll wird die Methode parseText(String) vom DocumentHelper genutzt. Natürlich muss der String bereits im XML-Format bestehen.

String xmlstring = "<html><body>Hallo</body></html>"

Document htmldocument = DocumentHelper.parseText(xmlstring);

 

Ein Document kann man auch mit Hilfe von XPath Ausdrücken durchsuchen und nach bestimmten Knoten oder Werten suchen.

    List<Node> nodes = freizeit.selectNodes("//Hobby[text()-'Programmieren']");
    for(Node node: nodes){
      System.out.println("Node heißt "+node.getName() "mit Wert "+ node.getText());
    }