Wie kann mit Java 8 mit dem DOM-Parser einfach eine XML Datei erzeugt werden?
Es sind keine weiteren Abhängigkeiten nötig. Allso keine imports von Fremdjars. Alles ist in Java 8 vorhanden:
import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element;

Es muss ein DOM Object mit der Baumstruktur erzeugt werden. Dann kann mit dem Transformer und dem StreamResult in eine Datei geschrieben werden.
Hier nun die drei Schritte:
1. Mit der DocumentBuilderFactory ein neues Document erzeugen:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()
2. Benötigte Elemente und Attribute erzeugen und dem Dokument hinzufügen
Element root = doc.createElement("map");
root.setAttribute("version", "www.wenzlaff.info 1.0.0");
doc.appendChild(root);3. den erzeugen Tree mit dem Transformer mit DOMSource mit StreamResult transformieren und in eine Datei speichern
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
DOMSource domSource = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File(zielMindmapName + ".mm"));
transformer.transform(domSource, streamResult);Es wird dann die folgende XML Datei erzeugt:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root version="www.wenzlaff.info 1.0.0"> <kind NAME="Thomas Wenzlaff"/> </root>
Hier nun das ganze Beispiel als JUnit Test:
/*
* DOM Parser Test Beispiel
*
* @author Thomas Wenzlaff
* @throws Exception bei Fehler
*/
@Test
public void checkDOMParsre() throws Exception {
// 1. Mit der DocumentBuilderFactory ein neuse Document erzeugen:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
// 2. Benötigte Elemente erzeugen und dem Dokument hinzufügen
Element root = doc.createElement("root");
root.setAttribute("version", "www.wenzlaff.info 1.0.0");
doc.appendChild(root);
// (optional) ein Kind dem root hinzufügen
Element kind = doc.createElement("kind");
kind.setAttribute("NAME", "Thomas Wenzlaff");
root.appendChild(kind);
// 3. den erzeugen Tree mit dem Transformer mit DOMSource mit StreamResult
// transformieren und in eine Datei speichern
Transformer transformer = TransformerFactory.newInstance().newTransformer();
// (optional) Property für die Formatierung setzen
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
DOMSource domSource = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File("dom-parsre-test.xml"));
transformer.transform(domSource, streamResult);
// 4. (optional) für Debug zweckt das XML File auf der Konsole ausgeben
StreamResult streamResultKonsole = new StreamResult(System.out);
transformer.transform(domSource, streamResultKonsole);
assertNotNull(streamResult);
}

Ähnliche Artikel:
- Linux Quickie: Wie kann eine sortierte CSV Datei mit Dateinamen, Rechten und Gruppe erzeugt werden?
- Wie kann mit der neuen Java Zeit API 1.8 ein Zeitstempel (2014-01-31_15:12:00) erzeugt werden?
- Fritzbox Telefonbuch (Phonebook) mit Java bearbeiten via JDom und SAXBuilder
