Напишете org.w3.dom.Документ във файл

1. Общ преглед

Важна част от XML обработката е създаването на XML файлове, които могат да се консумират от други.

Когато обработваме XML в Java, често имаме екземпляр org.w3c.dom.Document , който трябва да експортираме.

В този бърз урок ще видим как да напишем документ във файл както във вграден, така и в доста отпечатан формат .

2. Използване на трансформатор

Вдигачът на тежести при запис на Document s във файлове е javax.xml.transform.Transformer.

2.1. Създаване на трансформатор

И така, нека започнем с получаването на TransformerFactory . Ще използваме тази фабрика, за да създадем трансформатора:

TransformerFactory transformerFactory = TransformerFactory.newInstance()

Системното свойство javax.xml.transform.TransformerFactory указва коя фабрична реализация да се създаде. Следователно това свойство назовава конкретен подклас на абстрактния клас TransformerFactory . Но ако не дефинираме това свойство, трансформаторът просто ще използва платформа по подразбиране.

Имайте предвид, че от Java 9 можем да използваме TransformerFactory. newDefaultInstance (), за да създадете вградената реализация по подразбиране на системата.

Сега, когато имаме фабриката, нека създадем трансформатора :

Transformer transformer = transformerFactory.newTransformer();

2.2. Посочване на източника и резултата

The Transformer превръща в източник резултат. В нашия случай източникът е XML документ, а резултатът е изходният файл.

Първо, нека посочим източника на трансформацията. Тук ще използваме нашия документ, за да изградим DOM източник:

DOMSource source = new DOMSource(document);

Имайте предвид, че източникът не трябва да бъде целият документ. Докато XML е добре оформен, можем да използваме поддърво на документа.

След това ще посочим къде трансформаторът трябва да запише резултата от трансформацията:

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

Тук казваме на трансформатора, че резултатът е файлов поток. Но можем да използваме всякакъв вид java.io.Writer или java.io.OutputStream, за да създадем StreamResult. Например, бихме могли да използваме StringWriter, за да изградим String, който след това може да бъде регистриран.

2.3. Създаване на XML файл

И накрая, ще кажем на трансформатора да работи върху обекта източник и да изведе към обекта резултат:

transformer.transform(source, result);

Това най-накрая ще създаде файл със съдържанието на XML документа:

3. Персонализиране на изхода

Можем да персонализираме XML, записан във файла, като посочим различни изходни свойства . Нека разгледаме няколко от тях.

3.1. Доста-отпечатване на изхода

Сега нашият трансформатор по подразбиране просто написа всичко на един ред, което не е толкова приятно за четене. Всъщност ще бъде още по-трудно за четене, ако XML беше голям.

Можем да конфигурираме нашия трансформатор за красив печат, като зададем свойството OutputKeys.INDENT на трансформатора:

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

Забележете, че заедно с OutputKeys.INDENT тук сме посочили и свойството indent-amount . Това ще отстъпи изхода правилно, тъй като по подразбиране отстъпът е нула интервали.

С горния набор от свойства получаваме много по-хубав изход:

3.2. Пропускане на XML декларацията

Понякога може да искаме да изключим декларацията XML.

Можем да конфигурираме нашия трансформатор да прави това, като зададем свойството OutputKeys.OMIT_XML_DECLARATION :

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

И използвайки отново нашия трансформатор, получаваме:

3.3. Други изходни свойства

Така че, освен с красив печат и пропускане на XML декларацията, можем да персонализираме изхода и по други начини:

  • Можем да посочим XML версията с помощта на OutputKeys.VERSION, по подразбиране е „1.0“
  • Можем да посочим нашето предпочитано кодиране на символи с помощта на OutputKeys.ENCODING , по подразбиране е “utf-8”
  • Можем да посочим и други типични атрибути на декларация като SYSTEM , PUBLIC и STANDALONE .

4. Заключение

В този урок видяхме как да експортираме org.w3c.Document във файл и как да персонализираме изхода.

И, разбира се, придружаващият изходен код е достъпен в GitHub.