Форматирование XML или Pretty Print XML в Java

Форматирование XML или Pretty Print XML в Java

Обработка XML документов бывает очень неудобной и затратной по времени, особенно это касается xml-кода, который на вход подается в виде строки. Поэтому приходится писать вспомогательные классы для обработки и правильного форматирования таких данных. Этим мы сегодня и займемся.

Форматирование XML в Java

XML является одним из наиболее популярных способов обмена данными между различными приложениями. Различные сообщения и данные могут быть переданы разными способами, например, в виде строки (объектом String). Так получилось и у меня, когда на вход приходила строка xml кода без форматирования и отступов. Чтобы справиться с этим я написал специальный утилитный класс. Его мы сегодня и разберем.

В прошлой статье мы научились преобразовать строку в Document и создавать String из Document. Теперь же рассмотрим как форматировать полученный в строке XML на примере ниже:

Обратите внимание такие особенности программы:

  • В методе toPrettyXmlString() мы можем указывать indent — значение отступа.
  • Также мы использовали XPath выражение для удаления пробелов в исходной строке.
  • Воспользовались возможностями класса javax.xml.transform.TransformerFactory для определения параметров форматирования. Например, с помощью передачи параметру OutputKeys.OMIT_XML_DECLARATION значения "yes" указали, что хотим убрать XML declaration в переданном объекте Document.

Теперь запустим наш утилитный класс и смотрим на вывод в консоле:

Вот такой красивый и читабельный вид имеет преобразованная строка. Для того, чтобы посмотреть всю мощь и удобство представленного выше способа сделать Pretty Print XML в Java, попробуйте передать на вход большую неотформатированную строку с XML разметкой.

Следите за обновлениями и подписывайтесь на новые статьи.

One thought to “Форматирование XML или Pretty Print XML в Java”

  1. В строке 53 нужно вместо

    TransformerFactory transformerFactory = TransformerFactory.newInstance();

    написать

    TransformerFactory transformerFactory = new TransformerFactoryImpl();

    Не во всех Имплементациях TransformerFactory есть поле «indent-number»

Добавить комментарий для Drakonoved Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *