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:
1 2 3 4 5 6 7 8 9 |
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:
1 |
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() |
2. Benötigte Elemente und Attribute erzeugen und dem Dokument hinzufügen
1 2 3 |
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
1 2 3 4 5 6 7 |
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:
1 2 3 4 |
<?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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/* * 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); } |