Schreiben Sie ein org.w3.dom.Document in eine Datei

1. Übersicht

Ein wichtiger Teil der XML-Verarbeitung ist das Erstellen von XML-Dateien, die von anderen verwendet werden können.

Beim Umgang mit XML in Java haben wir häufig eine Instanz von org.w3c.dom.Document , die wir exportieren müssen.

In diesem kurzen Tutorial erfahren Sie, wie Sie ein Dokument sowohl in einem Inline- als auch in einem hübsch gedruckten Format in eine Datei schreiben .

2. Verwenden eines Transformators

Der Heavy-Lifter beim Schreiben von Dokumenten in Dateien ist javax.xml.transform.Transformer.

2.1. Transformator erstellen

Beginnen wir also mit einer TransformerFactory . Wir werden diese Fabrik verwenden, um den Transformator zu erstellen:

TransformerFactory transformerFactory = TransformerFactory.newInstance()

Die Systemeigenschaft javax.xml.transform.TransformerFactory gibt an, welche Factory-Implementierung erstellt werden soll. Folglich benennt diese Eigenschaft eine konkrete Unterklasse der abstrakten TransformerFactory- Klasse. Wenn wir diese Eigenschaft jedoch nicht definieren, verwendet der Transformator einfach einen Plattformstandard.

Beachten Sie, dass wir seit Java 9 TransformerFactory verwenden können. newDefaultInstance (), um die integrierte Systemstandardimplementierung zu erstellen.

Nachdem wir die Fabrik haben, erstellen wir den Transformator :

Transformer transformer = transformerFactory.newTransformer();

2.2. Angabe der Quelle und des Ergebnisses

Der Transformator wandelt eine Quelle in ein Ergebnis um. In unserem Fall ist die Quelle das XML-Dokument und das Ergebnis die Ausgabedatei.

Geben Sie zunächst die Quelle der Transformation an. Hier verwenden wir unser Dokument , um eine DOM-Quelle zu erstellen:

DOMSource source = new DOMSource(document);

Beachten Sie, dass die Quelle nicht das gesamte Dokument sein muss. Solange das XML gut geformt ist, können wir einen Unterbaum des Dokuments verwenden.

Als nächstes geben wir an, wo der Transformator das Ergebnis der Transformation schreiben soll:

FileWriter writer = new FileWriter(new File(fileName)); StreamResult result = new StreamResult(writer);

Hier teilen wir dem Transformator mit, dass das Ergebnis ein Dateistream ist. Wir können jedoch jede Art von java.io.Writer oder java.io.OutputStream verwenden , um das StreamResult zu erstellen . Zum Beispiel könnten wir einen StringWriter verwenden , um einen String zu erstellen , der dann protokolliert werden kann.

2.3. Erstellen der XML-Datei

Schließlich weisen wir den Transformator an, das Quellobjekt zu bearbeiten und an das Ergebnisobjekt auszugeben:

transformer.transform(source, result);

Dadurch wird schließlich eine Datei mit dem Inhalt des XML-Dokuments erstellt:

3. Anpassen der Ausgabe

Wir können das in die Datei geschriebene XML anpassen, indem wir verschiedene Ausgabeeigenschaften angeben . Lassen Sie uns einige davon untersuchen.

3.1. Die Ausgabe hübsch drucken

Jetzt hat unser Standardtransformator einfach alles in eine einzelne Zeile geschrieben, was nicht so angenehm zu lesen ist. In der Tat wäre es noch schwieriger zu lesen, wenn das XML groß wäre.

Wir können unseren Transformator für das hübsche Drucken konfigurieren, indem wir die OutputKeys.INDENT- Eigenschaft für den Transformator festlegen :

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{//xml.apache.org/xslt}indent-amount", "4");

Beachten Sie, dass wir zusammen mit OutputKeys.INDENT hier auch die Eigenschaft indent -amount angegeben haben. Dadurch wird die Ausgabe korrekt eingerückt, da der Einzug standardmäßig Null Leerzeichen ist.

Mit den oben genannten Eigenschaften erhalten wir eine viel schönere Ausgabe:

3.2. Auslassen der XML-Deklaration

Manchmal möchten wir möglicherweise die XML-Deklaration ausschließen.

Wir können unseren Transformator dafür konfigurieren, indem wir die Eigenschaft OutputKeys.OMIT_XML_DECLARATION festlegen :

transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");

Und wenn wir unseren Transformator wieder verwenden, erhalten wir:

3.3. Andere Ausgabeeigenschaften

Abgesehen vom hübschen Drucken und Weglassen der XML-Deklaration können wir die Ausgabe also auch auf andere Weise anpassen:

  • Wir können die XML-Version mit OutputKeys.VERSION angeben. Der Standardwert ist "1.0".
  • Wir können unsere bevorzugte Zeichenkodierung mit OutputKeys.ENCODING angeben . Der Standardwert ist "utf-8".
  • Außerdem können wir andere typische Deklarationsattribute wie SYSTEM , PUBLIC und STANDALONE angeben .

4. Fazit

In diesem Tutorial haben wir gesehen, wie ein org.w3c.Document in eine Datei exportiert und die Ausgabe angepasst wird.

Und natürlich ist der zugehörige Quellcode auf GitHub verfügbar.