Перейти к содержимому

Форматировать XML

Превратите сплошную стену XML в читаемый текст с отступами — или сожмите обратно. Комментарии, секции CDATA и пространства имён остаются нетронутыми. Ничего не сохраняется.

  • Не сохраняется
  • Без очереди и ожидания
  • Без регистрации и водяных знаков
Отступ
Отформатировано

Здесь появится отформатированный XML.

Как это работает

1

Вставьте XML

Или перетащите файл .xml, .svg, .rss или .xsd. Он не сохраняется.

2

Выберите отступ

Два пробела, четыре, табуляция или минификация в одну строку.

3

Скопируйте или скачайте

Если XML повреждён, вместо результата вы увидите номер строки и столбца.

Почему переформатировать XML рискованнее, чем кажется

Пробелы в XML по умолчанию значимы, и именно на этом многие попадаются. В отличие от JSON, где форматирование ничего не меняет, XML-парсер обязан сообщать о пробелах и переводах строк между элементами как о текстовом содержимом — и только схема, если она есть, говорит, что их можно игнорировать. Поэтому новые отступы действительно меняют документ. Для большинства конфигурационных файлов и файлов с данными это неважно, а в документах со смешанным содержимым — где текст и элементы стоят рядом, как в XHTML или DocBook, — это может изменить смысл написанного.

Поэтому форматирование здесь не трогает то, что трогать нельзя. Элемент с атрибутом xml:space="preserve" сохраняет содержимое в точности как написано — этот атрибут для того и существует. Секции CDATA передаются без изменений: они предназначены для текста, который нельзя интерпретировать, и переформатирование внутри них его испортит. Ссылки на сущности остаются ссылками и не раскрываются в символы, которые они обозначают.

Пространства имён сохраняются в точности как написаны — префиксы, объявления и привязанные к ним элементы. Звучит очевидно, но это не так: форматтер, который нормализует префиксы или переносит объявления туда, где им, по его мнению, место, выдаёт формально эквивалентный документ, который ломается в инструментах, сверяющих префиксы буквально. Порядок атрибутов тоже сохраняется, хотя для XML он ничего не значит, — по той же причине: сравнение с предыдущей версией ценнее аккуратности.

При форматировании проверяется корректность синтаксиса (well-formedness): все теги закрыты и правильно вложены, корневой элемент один, символы допустимы, амперсанды и угловые скобки экранированы. Это нижняя из двух планок XML. Документ может быть синтаксически безупречным и всё равно не соответствовать своему DTD или схеме — и никакое форматирование этого не покажет.

Если нужно другое

xmllint --format in.xml делает то же самое в командной строке и уже установлен в большинстве Unix-систем; xmlstarlet fo --indent-tab даёт больше контроля над самими отступами. Оба справляются с файлами гораздо больше тех, что страница может удержать в памяти.

Если документ нужно сравнивать, подписывать или хранить в каноническом виде, форматирование — вообще не та операция. Каноническая форма XML — xmllint --c14n — даёт единственный нормализованный вид, к которому сводятся два эквивалентных документа; на нём держатся цифровые подписи XML. Красивое форматирование подписанного документа ломает подпись — и это самый дорогой способ об этом узнать.

Частые вопросы

Мой XML где-нибудь сохраняется?

Нет. Запросов к серверу и журналов нет, ничего не сохраняется. После загрузки страницы можно отключиться от интернета — всё продолжит работать. Здесь это важнее, чем кажется: в онлайн-форматтеры вставляют ответы API, конфигурационные файлы и сообщения об ошибках, а в них часто оказываются токены, данные клиентов и внутренние имена хостов.

Что сохраняется при форматировании?

Комментарии, секции CDATA, инструкции обработки, XML-декларация и все префиксы пространств имён. Порядок атрибутов остаётся как написан. Элемент, содержащий только текст, остаётся в одной строке: разбить <title>Hello</title> на три строки — не красивее, а в документе со смешанным содержимым это изменило бы сам текст.

Изменят ли отступы смысл моего XML?

В элементе, который содержит только другие элементы, — нет. Но в XML нет общего правила, что пробелы незначимы: в смешанном содержимом, где текст и элементы стоят рядом, добавленные пробелы СТАНОВЯТСЯ частью текста. Поэтому элементы только с текстом здесь не разбиваются на строки. Если в документе есть настоящее смешанное содержимое и пробелы в нём важны, безопаснее минифицировать.

Подходит ли это для HTML?

Только если HTML — корректный XML, а реальный HTML обычно таким не является. Незакрытые теги <br>, <img> и <li>, атрибуты без кавычек и одиночные амперсанды допустимы в HTML и недопустимы в XML. Здесь работает строгий XML-парсер, поэтому он сообщит об этом как об ошибках, а не будет угадывать. XHTML и SVG форматируются идеально.

А SVG?

Да — SVG это XML, и так удобно читать минифицированный файл. Контуры, градиенты и встроенные стили проходят без изменений; меняются только пробелы между элементами.

Есть ли ограничение по размеру?

Ограничивает доступная память, а не лимит с нашей стороны. Документы в несколько мегабайт форматируются мгновенно; очень большие упираются в то, сколько можно удержать в памяти одновременно, а не в какие-то наши ограничения.

Полезно знать: Только проверка корректности синтаксиса (well-formedness). Документ проверяется на парность тегов, правильную вложенность и допустимые символы и заново получает отступы, но DTD или XSD не загружаются и не применяются: файл может отлично отформатироваться и всё равно не соответствовать своей схеме. Пространства имён сохраняются в точности как написаны.

Разместите этот инструмент на своём сайте

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