Schrijf een org.w3.dom.Document naar een bestand

1. Overzicht

Een belangrijk onderdeel van het omgaan met XML is het maken van XML-bestanden die door anderen kunnen worden gebruikt.

Bij het afhandelen van XML in Java hebben we vaak een exemplaar van org.w3c.dom.Document die we moeten exporteren.

In deze korte tutorial, we zullen zien hoe we een Document naar een bestand zowel in een in-line als in een mooi gedrukt formaat.

2. Met behulp van een transformator

De zwaargewichter bij het schrijven Documents naar bestanden is javax.xml.transform.Transformer.

2.1. De transformator maken

Dus laten we beginnen met een TransformerFactory. We zullen deze fabriek gebruiken om de transformator te maken:

TransformerFactory transformerFactory = TransformerFactory.newInstance ()

De systeemeigenschap javax.xml.transform.TransformerFactory specificeert welke fabrieksimplementatie moet worden gemaakt. Bijgevolg noemt deze eigenschap een concrete subklasse van de TransformerFactory abstracte klasse. Maar als we deze eigenschap niet definiëren, zal de transformator gewoon een platformstandaard gebruiken.

Merk op dat we sinds Java 9 TransformerFactory. newDefaultInstance () om de ingebouwde standaardsysteemimplementatie te maken.

Nu we de fabriek hebben, gaan we het Transformator:

Transformator transformator = transformerFactory.newTransformer ();

2.2. Specificeren van de bron en het resultaat

De Transformator zet een bron om in een resultaat. In ons geval is de bron het XML-document en het resultaat is het uitvoerbestand.

Laten we eerst de bron van de transformatie specificeren. Hier gebruiken we onze Document om een ​​DOM-bron te construeren:

DOMSource-bron = nieuwe DOMSource (document);

Merk op dat de bron niet het hele document hoeft te zijn. Zolang de XML goed is gevormd, kunnen we een subboom van het document gebruiken.

Vervolgens specificeren we waar de transformator het resultaat van de transformatie moet schrijven:

FileWriter-schrijver = nieuwe FileWriter (nieuw bestand (bestandsnaam)); StreamResult resultaat = nieuwe StreamResult (schrijver);

Hier vertellen we de transformator dat het resultaat een bestandsstroom is. Maar we kunnen elke soort gebruiken java.io.Writer of java.io.OutputStream om het StreamResult.We kunnen bijvoorbeeld een StringWriter om een Draad die vervolgens kunnen worden gelogd.

2.3. Het XML-bestand maken

Ten slotte vertellen we de transformator om op het bronobject te werken en uit te voeren naar het resultaatobject:

transformer.transform (bron, resultaat);

Dit zal uiteindelijk een bestand maken met de inhoud van het XML-document:

3. De uitvoer aanpassen

We kunnen de XML die naar het bestand is geschreven, aanpassen door verschillende uitvoereigenschappen op te geven. Laten we er een paar bekijken.

3.1. De uitvoer mooi afdrukken

Nu schreef onze standaardtransformator alles gewoon op één regel, wat niet zo prettig is om te lezen. Het zou zelfs nog moeilijker te lezen zijn als de XML groot was.

We kunnen onze transformator configureren voor mooie afdrukken door de OutputKeys.INDENT woning op de transformator:

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

Merk op dat samen met de OutputKeys.INDENT, hebben we ook de streepje-bedrag eigendom hier. Dit zal de uitvoer correct laten inspringen, aangezien de inspringing standaard nul spaties is.

Met de bovenstaande eigenschappen ingesteld, krijgen we een veel leukere uitvoer:

3.2. Het weglaten van de XML-declaratie

Soms willen we de XML-declaratie uitsluiten.

We kunnen onze transformator configureren om dit te doen door de OutputKeys.OMIT_XML_DECLARATION eigendom:

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

En als we onze transformator opnieuw gebruiken, krijgen we:

3.3. Andere uitvoereigenschappen

Dus afgezien van het mooi afdrukken en het weglaten van de XML-declaratie, kunnen we de uitvoer ook op andere manieren aanpassen:

  • We kunnen de XML-versie specificeren met OutputKeys.VERSION, de standaardwaarde is "1.0"
  • We kunnen onze geprefereerde tekencodering aangeven met OutputKeys.ENCODING, de standaardwaarde is "utf-8"
  • En we kunnen ook andere typische declaratieattributen specificeren, zoals SYSTEEM, OPENBAAR, en STANDALONE.

4. Conclusie

In deze tutorial hebben we gezien hoe je een org.w3c.Document naar een bestand en hoe u de uitvoer kunt aanpassen.

En natuurlijk is de bijbehorende broncode beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found