Инструменты
Руководства

Форматирование и сжатие XML

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

Красивое оформление или сжатие XML через fast-xml-parser. Нормализует отступы, атрибуты и самозакрывающиеся теги. Только обработка XML — без конвертации форматов.

100 % на клиенте Без бэкенда

Удалённые URL не запрашиваются; вставьте JSON напрямую.

Ввод
Вывод
Вставьте XML слева и выберите «Форматировать» или «Сжать».
На этой странице

Что такое форматтер XML?#

Форматтер XML переформатирует документ, потерявший структуру, — SOAP-ответ, сваленный в одну строку, RSS-ленту, пропущенную через прокси, который схлопнул пробелы, или конфиг-файл, правленный в текстовом поле, не сохранившем отступы, — и переформатирует его так, чтобы иерархия элементов была видна. Обратное, минификация, убирает каждый байт межтеговых пробелов, чтобы документ стал максимально компактным для пересылки.

Что делает полный цикл XML сложнее, чем кажется, — наивный поиск-и-замена по < и > разрушает информацию. Порядок элементов, декларация <?xml?>, комментарии, инструкции вроде <?xml-stylesheet?>, порядок атрибутов и разница между <a></a> и <a/> — всё это несёт смысл. Эта страница использует fast-xml-parser в режиме preserve-order, который разбирает документ в упорядоченное дерево и точно восстанавливает его, — поэтому форматирование это нормализованный вид именно вашего документа, а не пересортированный. Это же причина, по которой инструмент отделён от конвертером JSON/XML: он делает чистый цикл XML-в-XML и никогда не меняет формат данных.

Как пользоваться#

  1. Вставьте XML в панель Ввод слева. Плейсхолдер показывает минимальный документ <?xml?>, если нужна отправная точка, либо нажмите Пример.
  2. Выберите кнопку режима на панели инструментов:
    • Форматировать — разбирает, затем перестраивает с отступами и переносами строк. Пустые элементы сворачиваются в самозакрывающуюся форму (<a></a> становится <a/>), атрибуты сохраняются, комментарии и декларация выживают.
    • Сжать — разбирает, затем перестраивает как одну компактную строку без межтеговых пробелов и без завершающего перевода строки.
  3. В режиме форматирования выберите Отступ: 2 пробела, 4 пробела или Табуляция.
  4. Прочитайте результат в панели Вывод. Шапка показывает размер выхода в символах; возьмите его через Копировать. Очистить сбрасывает обе панели.

Если вход не является well-formed — незакрытый тег, затесавшийся &, который должен быть &amp;, — строка состояния сообщает об ошибке с лучшим приближением строки и столбца, поэтому проблему можно найти, а не пялиться в пустой выход.

Ключевые возможности#

  • Точный полный цикл. Разбор в режиме preserve-order сохраняет порядок документа, декларацию <?xml?>, комментарии и инструкции по циклу форматирования/минификации.
  • Единый парсер для обоих режимов. Форматирование и минификация разбирают одинаково; они различаются только тем, как билдер выдаёт текст. Поэтому если минификация прошла успешно, пройдёт и форматирование, и наоборот.
  • Нормализация самозакрывающихся тегов. Пустые элементы вроде <a></a> сворачиваются в <a/>, каноническую компактную форму, что делает различия в пробелах очевидными при сравнении.
  • Значения остаются строками. Парсер настроен с parseTagValue: false, поэтому текстовый узел true остаётся строкой "true", а 007 остаётся "007". Никакого тихого приведения типов, которое удивило бы вас на обратном пути.
  • Крупные входы уходят с главного потока. Документы крупнее 1 МБ направляются через Web Worker, поэтому страница остаётся отзывчивой при разборе. Меньшие входы обрабатываются inline.
  • Строго на стороне клиента. Парсер встроен в страницу; ваш XML не покидает браузер.

Разбор примера#

Небольшой конфигурационный документ, утрамбованный в две строки:

Ввод:

<?xml version="1.0"?><config><server host="example.com" port="443"/><feature name="cache"/><feature name="logs"></feature></config>

Нажмите Форматировать с отступом 2 пробела:

<?xml version="1.0"?>
<config>
  <server host="example.com" port="443"/>
  <feature name="cache"/>
  <feature name="logs"/>
</config>

Бросаются в глаза две вещи. Декларация <?xml version="1.0"?> пережила полный цикл и осталась на верху документа. А оба <feature name="logs"></feature> и уже самозакрывающийся <feature name="cache"/> теперь выглядят как <feature name="logs"/> — пустые элементы нормализованы в самозакрывающуюся форму, поэтому две фичи одинаковой структуры и выглядят одинаково. Нажмите Сжать на исходном входе — и вы получите транспортный вид:

<?xml version="1.0"?><config><server host="example.com" port="443"/><feature name="cache"/><feature name="logs"/></config>

Каждый байт декоративных пробелов ушёл, но порядок атрибутов на <server> нетронут, а декларация на месте.

FAQ#

В чём разница между этим инструментом и конвертером JSON/XML?#

Этот инструмент — XML на входе, XML на выходе: он наводит красоту или минифицирует XML-документ и возвращает XML. Конвертер JSON/XML на этом сайте переводит между двумя форматами, превращая XML в дерево JSON-объектов или наоборот. Используйте эту страницу, когда хотите тот же формат, но лучше сформированный; конвертер — когда действительно нужно сменить формат.

Сохраняет ли форматирование мои комментарии?#

Да. Комментарии попадают в упорядоченное дерево при разборе и выводятся построителем, поэтому <!-- note --> выживает и при форматировании, и при минификации. Инструкция обработки <?xml-stylesheet?> тоже сохраняется.

Почему место ошибки иногда приблизительное?#

Базовый парсер не раскрывает позиции символов для всех режимов отказа, поэтому при некоторых ошибках эта страница может сообщить лишь лучшее приближение строки и столбца, восстановленное из сообщения парсера. Для отсутствующего закрывающего тега место обычно точное; для более экзотических ошибок разбора оно может уходить в строку 1. Само сообщение об ошибке всегда показывается целиком — его, как правило, достаточно, чтобы найти виновника.

Справится ли инструмент с очень большими XML-файлами?#

Да, в пределах памяти браузера. Входы свыше 1 МБ разбираются внутри Web Worker, чтобы UI не зависал. Для документов на сотни мегабайт ожидайте, что разбор займёт заметное время и память, — это браузерный инструмент, а не потоковый сервер.