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

1. Oversigt

En vigtig del af XML-håndtering er at oprette XML-filer, der kan forbruges af andre.

Når vi håndterer XML i Java, har vi ofte en forekomst af org.w3c.dom.Document at vi har brug for at eksportere.

I denne hurtige vejledning vi får se, hvordan man skriver en Dokument til en fil både i et indbygget såvel som i et smukt udskrevet format.

2. Brug af en transformer

Den tunge løfter, når man skriver Dokuments til filer er javax.xml.transform.Transformer.

2.1. Oprettelse af transformeren

Så lad os starte med at få en TransformerFabrik. Vi bruger denne fabrik til at oprette transformeren:

TransformerFactory transformerFactory = TransformerFactory.newInstance ()

Systemets egenskab javax.xml.transform.TransformerFactory angiver, hvilken fabriksimplementering der skal oprettes. Derfor navngiver denne ejendom en konkret underklasse af TransformerFabrik abstrakt klasse. Men hvis vi ikke definerer denne egenskab, bruger transformeren simpelthen en platformstandard.

Bemærk, at siden Java 9 kan vi bruge TransformerFabrik. newDefaultInstance () for at oprette den indbyggede implementering af system-standard.

Nu hvor vi har fabrikken, lad os oprette Transformer:

Transformer transformer = transformerFactory.newTransformer ();

2.2. Angivelse af kilde og resultat

Det Transformer omdanner en kilde til et resultat. I vores tilfælde er kilden XML-dokumentet, og resultatet er outputfilen.

Lad os først angive kilden til transformationen. Her bruger vi vores Dokument at konstruere en DOM-kilde:

DOMSource kilde = ny DOMSource (dokument);

Bemærk, at kilden ikke behøver at være hele dokumentet. Så længe XML er velformet, kan vi bruge et undertræ i dokumentet.

Dernæst specificerer vi, hvor transformeren skal skrive resultatet af transformationen:

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

Her fortæller vi transformeren, at resultatet er en filstrøm. Men vi kan bruge enhver form for java.io.Writer eller java.io.OutputStream at oprette StreamResult.For eksempel kunne vi bruge en StringWriter at konstruere en Snor der kan derefter logges.

2.3. Oprettelse af XML-filen

Endelig fortæller vi transformeren at operere på kildeobjektet og output til resultatobjektet:

transformer.transform (kilde, resultat);

Dette opretter endelig en fil med indholdet af XML-dokumentet:

3. Tilpasning af output

Vi kan tilpasse XML, der er skrevet til filen, ved at angive en række forskellige outputegenskaber. Lad os udforske et par af disse.

3.1. Smuk udskrivning af output

Nu skrev vores standardtransformator simpelthen alt på en enkelt linje, hvilket ikke er så behageligt at læse. Faktisk ville det være endnu sværere at læse, hvis XML var stor.

Vi kan konfigurere vores transformer til pæn udskrivning ved at indstille OutputKeys.INDENT ejendom på transformeren:

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

Bemærk, at sammen med OutputKeys.INDENT, vi har også specificeret indrykningsbeløb ejendom her. Dette indrykker output korrekt, da indrykningen som standard er nul mellemrum.

Med ovenstående egenskaber får vi en meget pænere output:

3.2. Udeladelse af XML-erklæringen

Nogle gange vil vi måske ekskludere XML-erklæringen.

Vi kan konfigurere vores transformer til at gøre dette ved at indstille OutputKeys.OMIT_XML_DECLARATION ejendom:

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

Og ved hjælp af vores transformer igen får vi:

3.3. Andre outputegenskaber

Så bortset fra pæn udskrivning og udeladelse af XML-erklæringen kan vi også tilpasse output på andre måder:

  • Vi kan specificere XML-versionen ved hjælp af OutputKeys.VERSION, standard er "1.0"
  • Vi kan angive vores foretrukne tegnkodning ved hjælp af OutputKeys.KODNING, er standard “utf-8”
  • Og vi kan også specificere andre typiske erklæringsattributter som f.eks SYSTEM, OFFENTLIGog STANDALONE.

4. Konklusion

I denne vejledning så vi, hvordan man eksporterer en org.w3c.Dokument til en fil, og hvordan man tilpasser output.

Og selvfølgelig er den ledsagende kildekode tilgængelig på GitHub.