Записать 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».
-
И мы также можем указать другие типичные атрибуты объявления, такие какSYSTEM, PUBLIC, and STANDALONE.
4. Заключение
В этом руководстве мы увидели, как экспортировать файлorg.w3c.Document to и как настроить вывод.
И, конечно же, доступен сопутствующий исходный кодover on GitHub.