Написать org.w3.dom.Document в файл

Записать org.w3.dom.Document в файл

1. обзор

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

При обработке XML в Java у нас часто бывает экземплярorg.w3c.dom.Document t, который нам нужно экспортировать.

В этом кратком руководствеwe’ll see how to write a Document to a file both in an in-line as well as a pretty-printed format.

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

Тяжелее при записиDocuments в файлы являетсяjavax.xml.transform.Transformer.

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

Итак, давайте начнем с полученияTransformerFactory. Мы будем использовать эту фабрику для создания трансформатора:

TransformerFactory transformerFactory = TransformerFactory.newInstance()

Системное свойствоjavax.xml.transform.TransformerFactory указывает, какую реализацию фабрики нужно создать. Следовательно, это свойство называет конкретный подкласс класса sabstractTransformerFactory . But, if we don’t define this property, the transformer will simply use a platform default.

Обратите внимание, что начиная с Java 9 мы можем использоватьTransformerFactory.newDefaultInstance() для создания встроенной реализации по умолчанию для системы.

Теперь, когда у нас есть фабрика, давайте создадимTransformer:

Transformer transformer = transformerFactory.newTransformer();

2.2. Указание источника и результата

The Transformer transforms a source into a result. В нашем случае источником является документ XML, а результатом является выходной файл.

Во-первых, давайте укажем источник преобразования. Здесь мы будем использовать нашDocument для создания источника DOM:

DOMSource source = new DOMSource(document);

Note that the source doesn’t have to be the whole document. Пока XML правильно сформирован, мы можем использовать поддерево документа.

Далее мы укажем, куда преобразователь должен записывать результат преобразования:

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

Здесь мы сообщаем преобразователю, что результатом является файловый поток. But, we can use any kind of java.io.Writer or java.io.OutputStream to create the*StreamResult.* Например, мы могли бы использоватьStringWriter to построитьString, который затем может быть зарегистрирован.

2.3. Создание файла XML

Наконец, мы приказываем преобразователю работать с исходным объектом и выводить результат в объект результата:

transformer.transform(source, result);

Это, наконец, создаст файл с содержимым XML-документа:


  

3. Настройка вывода

Мы можем настроить XML, записанный в файл, указав различные выходные свойства. Давайте рассмотрим некоторые из них.

3.1. Хорошая печать вывода

Теперь наш преобразователь по умолчанию просто записывает все в одну строку, что не так приятно читать. Действительно, было бы еще труднее читать, если бы XML был большим.

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

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://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».

  • И мы также можем указать другие типичные атрибуты объявления, такие какSYSTEMPUBLIC, and STANDALONE.

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

В этом руководстве мы увидели, как экспортировать файлorg.w3c.Document to и как настроить вывод.

И, конечно же, доступен сопутствующий исходный кодover on GitHub.