Wie kann mit Java 8 und dem DOM-Parser einfach eine XML Datei erzeugt werden?

Erstellt am 28. Juni 2019 von It_berater

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:

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