Форматирование и сжатие XML
ФорматированиеКрасивое оформление или сжатие XML через fast-xml-parser. Нормализует отступы, атрибуты и самозакрывающиеся теги. Только обработка XML — без конвертации форматов.
Удалённые URL не запрашиваются; вставьте JSON напрямую.
На этой странице
Что такое форматтер XML?#
Форматтер XML переформатирует документ, потерявший структуру, — SOAP-ответ, сваленный в одну строку, RSS-ленту, пропущенную через прокси, который схлопнул пробелы, или конфиг-файл, правленный в текстовом поле, не сохранившем отступы, — и переформатирует его так, чтобы иерархия элементов была видна. Обратное, минификация, убирает каждый байт межтеговых пробелов, чтобы документ стал максимально компактным для пересылки.
Что делает полный цикл XML сложнее, чем кажется, — наивный поиск-и-замена по < и > разрушает информацию. Порядок элементов, декларация <?xml?>, комментарии, инструкции вроде <?xml-stylesheet?>, порядок атрибутов и разница между <a></a> и <a/> — всё это несёт смысл. Эта страница использует fast-xml-parser в режиме preserve-order, который разбирает документ в упорядоченное дерево и точно восстанавливает его, — поэтому форматирование это нормализованный вид именно вашего документа, а не пересортированный. Это же причина, по которой инструмент отделён от конвертером JSON/XML: он делает чистый цикл XML-в-XML и никогда не меняет формат данных.
Как пользоваться#
- Вставьте XML в панель Ввод слева. Плейсхолдер показывает минимальный документ
<?xml?>, если нужна отправная точка, либо нажмите Пример. - Выберите кнопку режима на панели инструментов:
- Форматировать — разбирает, затем перестраивает с отступами и переносами строк. Пустые элементы сворачиваются в самозакрывающуюся форму (
<a></a>становится<a/>), атрибуты сохраняются, комментарии и декларация выживают. - Сжать — разбирает, затем перестраивает как одну компактную строку без межтеговых пробелов и без завершающего перевода строки.
- Форматировать — разбирает, затем перестраивает с отступами и переносами строк. Пустые элементы сворачиваются в самозакрывающуюся форму (
- В режиме форматирования выберите Отступ: 2 пробела, 4 пробела или Табуляция.
- Прочитайте результат в панели Вывод. Шапка показывает размер выхода в символах; возьмите его через Копировать. Очистить сбрасывает обе панели.
Если вход не является well-formed — незакрытый тег, затесавшийся &, который должен быть &, — строка состояния сообщает об ошибке с лучшим приближением строки и столбца, поэтому проблему можно найти, а не пялиться в пустой выход.
Ключевые возможности#
- Точный полный цикл. Разбор в режиме 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 не зависал. Для документов на сотни мегабайт ожидайте, что разбор займёт заметное время и память, — это браузерный инструмент, а не потоковый сервер.