Форматировщик XML

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

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

Форматирование XML без его поломки

Пробельные символы в XML — это содержимое

Это единственный факт, отличающий форматирование XML от форматирования JSON. В JSON пробелы между токенами не имеют значения, и их удаление всегда безопасно. В XML символы между <name> и Ada являются частью текстового узла элемента. Переформатирование документа технически меняет то, что он содержит.

На практике это почти никогда не важно, поскольку подавляющее большинство XML использует контент только из элементов — элементы, содержащие другие элементы и больше ничего, — где окружающие пробелы игнорируются любой схемой. Форматировщик добавляет отступы только внутри таких элементов. Когда элемент содержит реальный текст или смесь текста и дочерних элементов, как это делает HTML-разметка, его содержимое оставляется ровно таким, каким было найдено. Это единственное правило не даёт <p>Hello <b>there</b></p> незаметно обрести пробелы вокруг there.

«Корректно сформированный» — не то же, что «допустимый»

Проверка, выполняемая здесь, — это корректность формирования (well-formedness), которую спецификация XML требует от каждого парсера: один корневой элемент, каждый тег закрыт и правильно вложен, значения атрибутов взяты в кавычки, а & и < экранированы внутри текста. Если что-то из этого нарушено, документ отклоняется целиком — XML, в отличие от HTML, знаменит отсутствием восстановления после ошибок.

Допустимость — это дальнейший шаг: она спрашивает, соответствует ли документ схеме DTD, XSD или RelaxNG, так что <invoice> действительно содержит <total>, а дата действительно является датой. Для этого требуется схема, которая не является частью вставляемого документа. Зелёный результат здесь означает, что синтаксис корректен и любой парсер примет файл. Это не означает, что принимающая система сочтёт содержимое правильным.

Минификация и самозакрывающиеся теги

Минификация удаляет игнорируемые пробелы между элементами и помещает весь документ в одну строку. Поскольку эти пробелы никогда не были содержимым, вывод, начавшийся как разметка только из элементов, разбирается в точно то же дерево.

Другая экономия исходит от пустых элементов: <summary></summary> и <summary/> определены спецификацией как идентичные, и на выводе используется более короткая форма. Выгода реальна, но скромна — XML платит большую часть своего размера повторяющимися именами тегов, поскольку каждый элемент пишет своё имя дважды. Если файл должен быть действительно меньше, ответ — gzip; он обрабатывает эти повторяющиеся имена гораздо лучше, чем любое удаление пробелов. Обязательно сохраняйте отформатированную копию для чтения, поскольку минифицированный XML практически нечитаем для человека.

Примечание с открытым исходным кодом: реализовано на чистом JavaScript без сторонних библиотек.

Часто задаваемые вопросы

Загружается ли мой XML куда-либо?
Нет. Документ разбирается и сериализуется в вашем браузере с помощью встроенного DOMParser, поэтому ничего не отправляется на сервер.
Меняет ли форматирование мой документ?
Только внутри элементов, которые содержат только другие элементы, где пробелы игнорируются. Элементы с текстом или смешанным содержимым остаются нетронутыми.
Проверяет ли это соответствие схеме?
Нет. Он проверяет корректность формирования — закрытые и правильно вложенные теги, один корень, экранированные символы. Проверка соответствия DTD или XSD требует саму схему.
Почему мой документ отклонён?
Обычно это незакрытый или несоответствующий тег, неэкранированные & или <, значение атрибута без кавычек или больше одного корневого элемента. В XML нет восстановления после ошибок.
Что означают счётчики элементов и глубины?
Элементы — это общее количество узлов элементов в документе. Глубина — самая длинная цепочка вложенных элементов, при этом корень считается уровнем один.
Почему мои пустые теги изменили форму?
<a></a> и <a/> определены спецификацией XML как идентичные, поэтому минифицированный вывод использует более короткую самозакрывающуюся форму, чтобы сэкономить байты.