Schreibe ein org.w3.dom.Document in eine Datei

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

1. Überblick

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

Beim Umgang mit XML in Java haben wir häufig eine Instanz vonorg.w3c.dom.Document , die exportiert werden muss.

In diesem kurzen Tutorial werdenwe’ll see how to write a Document to a file both in an in-line as well as a pretty-printed format.

2. Verwenden eines Transformators

Der Heavy-Lifter beim Schreiben vonDocuments in Dateien istjavax.xml.transform.Transformer.

2.1. Transformator erstellen

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

TransformerFactory transformerFactory = TransformerFactory.newInstance()

Die Systemeigenschaftjavax.xml.transform.TransformerFactory gibt an, welche Factory-Implementierung erstellt werden soll. Folglich benennt diese Eigenschaft eine konkrete Unterklasse der Sabstract-KlasseTransformerFactory . But, if we don’t define this property, the transformer will simply use a platform default.

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

Nachdem wir die Fabrik haben, erstellen wir dieTransformer:

Transformer transformer = transformerFactory.newTransformer();

2.2. Angabe der Quelle und des Ergebnisses

The Transformer transforms a source into a result. 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 unsereDocument, um eine DOM-Quelle zu erstellen:

DOMSource source = new DOMSource(document);

Note that the source doesn’t have to be the whole document. 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. But, we can use any kind of java.io.Writer or java.io.OutputStream to create the*StreamResult.*  Zum Beispiel könnten wir einStringWriter verwenden, um einString zu konstruieren, das 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.Lass 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 die XML groß wäre.

Wir können unseren Transformator für das hübsche Drucken konfigurieren, indem wir die EigenschaftOutputKeys.INDENTfür den Transformator festlegen:

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

Beachten Sie, dass wir hier zusammen mitOutputKeys.INDENT auch die Eigenschaftindent-amount angegeben haben. Dadurch wird die Ausgabe korrekt eingerückt, da der Einzug standardmäßig keine Leerzeichen enthält.

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



    
        
        
    

3.2. Auslassen der XML-Deklaration

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

Wir können unseren Transformator dafür konfigurieren, indem wir dieOutputKeys.OMIT_XML_DECLARATION -Eigenschaft einstellen:

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

Und wenn wir unseren Transformator wieder benutzen, erhalten wir:


    
        
        
    

3.3. Andere Ausgabeeigenschaften

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

  • Wir können die XML-Version mitOutputKeys.VERSION, angeben. Der Standardwert ist "1.0".

  • Wir können unsere bevorzugte Zeichenkodierung mitOutputKeys.ENCODING angeben. Der Standardwert ist "utf-8".

  • Außerdem können wir andere typische Deklarationsattribute wieSYSTEMPUBLIC, and STANDALONE angeben.

4. Fazit

In diesem Tutorial haben wir gesehen, wie man einorg.w3c.Document in eine Datei exportiert und wie man die Ausgabe anpasst.

Und natürlich ist der zugehörige Quellcodeover on GitHub verfügbar.