Skriv et org.w3.dom.Dokument til en fil

1. Oversikt

En viktig del av XML-håndtering er å lage XML-filer som kan konsumeres av andre.

Når vi håndterer XML i Java, har vi ofte en forekomst av org.w3c.dom.Document som vi trenger å eksportere.

I denne raske opplæringen, vi får se hvordan vi skriver en Dokument til en fil både i en linje og i et ganske trykt format.

2. Bruke en transformator

Tungløfteren når du skriver Dokuments til filer er javax.xml.transform.Transformer.

2.1. Opprette transformatoren

Så la oss starte med å få en TransformerFactory. Vi bruker denne fabrikken til å lage transformatoren:

TransformerFactory transformerFactory = TransformerFactory.newInstance ()

Systemegenskapen javax.xml.transform.TransformerFactory spesifiserer hvilken fabrikkimplementering du skal opprette. Følgelig navngir denne eiendommen en konkret underklasse av TransformerFactory abstrakt klasse. Men hvis vi ikke definerer denne egenskapen, vil transformatoren bare bruke en standard plattform.

Merk at siden Java 9 kan vi bruke TransformerFactory. newDefaultInstance () for å opprette den innebygde implementeringen av system-standard.

Nå som vi har fabrikken, la oss lage Transformator:

Transformator transformator = transformerFactory.newTransformer ();

2.2. Spesifisere kilde og resultat

De Transformator forvandler en kilde til et resultat. I vårt tilfelle er kilden XML-dokumentet, og resultatet er utdatafilen.

La oss først spesifisere kilden til transformasjonen. Her bruker vi vår Dokument å konstruere en DOM-kilde:

DOMSource source = new DOMSource (document);

Merk at kilden ikke trenger å være hele dokumentet. Så lenge XML er velformet, kan vi bruke et undertre i dokumentet.

Deretter spesifiserer vi hvor transformatoren skal skrive resultatet av transformasjonen:

FileWriter-forfatter = ny FileWriter (ny fil (filnavn)); StreamResult resultat = ny StreamResult (skribent);

Her forteller vi transformatoren at resultatet er en filstrøm. Men vi kan bruke alle slags java.io.Writer eller java.io.OutputStream å lage StreamResult.For eksempel kan vi bruke en StringWriter å konstruere en String som deretter kan logges.

2.3. Opprette XML-fil

Til slutt vil vi fortelle transformatoren å operere på kildeobjektet og sende ut til resultatobjektet:

transformer.transform (kilde, resultat);

Dette vil til slutt opprette en fil med innholdet i XML-dokumentet:

3. Tilpasse utdataene

Vi kan tilpasse XML som er skrevet til filen ved å spesifisere en rekke utdataegenskaper. La oss utforske noen få av disse.

3.1. Pen utskrift av utdataene

Nå skrev standardtransformatoren vår alt på en enkelt linje, som ikke er så hyggelig å lese. Det ville faktisk være enda vanskeligere å lese om XML var stor.

Vi kan konfigurere transformatoren vår for pen utskrift ved å stille inn OutputKeys.INDENT eiendom på transformatoren:

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

Legg merke til at sammen med OutputKeys.INDENT, har vi også spesifisert innrykk-beløp eiendom her. Dette vil rykke ut utdataene riktig, da innrykket som standard er null mellomrom.

Med ovennevnte egenskaper, får vi en mye bedre produksjon:

3.2. Utelatelse av XML-erklæringen

Noen ganger kan det være lurt å ekskludere XML-erklæringen.

Vi kan konfigurere transformatoren vår til å gjøre dette ved å stille inn OutputKeys.OMIT_XML_DECLARATION eiendom:

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

Og ved å bruke transformatoren vår igjen får vi:

3.3. Andre utdataegenskaper

Så bortsett fra ganske utskrift og utelatelse av XML-erklæringen, kan vi også tilpasse utdataene på andre måter:

  • Vi kan spesifisere XML-versjonen ved hjelp av OutputKeys.VERSION, standard er “1.0”
  • Vi kan indikere vår foretrukne tegnkoding ved hjelp av Utgangstaster.KODING, er standard “utf-8”
  • Og vi kan også spesifisere andre typiske erklæringsattributter som SYSTEM, OFFENTLIG, og STANDALONE.

4. Konklusjon

I denne opplæringen så vi hvordan du eksporterer en org.w3c.Dokument til en fil og hvordan du tilpasser utdataene.

Og selvfølgelig er den medfølgende kildekoden tilgjengelig på GitHub.


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