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