Форматирование и проверка XML

Отформатировать XML с отступами, сжать в одну строку и проверить корректность с указанием места ошибки. Показывает дерево элементов с атрибутами. Всё считается в браузере.

Параметры

Форматирование расставляет отступы, сжатие убирает пробелы между тегами

Сколько пробелов на каждый уровень вложенности

Убирать пустые текстовые узлыОтступы чужого форматирования: элемент без содержимого схлопывается в <тег/>

Исходный XML

Разбор идёт по мере ввода — ошибка и результат видны сразу

Результат

Структура

Дерево появится, когда в поле выше будет корректный XML.

Зачем проверять и форматировать XML

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

Инструмент делает с документом три вещи: расставляет отступы, собирает в одну строку и проверяет корректность. Проверка идёт первой — разбирать сломанный документ нечем, поэтому при ошибке рядом с сообщением парсера показана строка исходного текста с отмеченным местом, а не просто слово «ошибка». Панель «Структура» показывает дерево элементов с атрибутами и текстом: по ней видно вложенность и то, какие данные в документе вообще есть, — это быстрее, чем вычитывать разметку глазами.

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

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

Как найти ошибку в XML и что означает сообщение парсера?

Вставьте документ в поле ввода — разбор идёт по мере ввода, без кнопки «Проверить». Если разобрать не удалось, появится панель «Ошибка разбора»: сообщение парсера дословно, пояснение к нему по-русски и строка исходного текста с отмеченным местом. Текст сообщения даёт движок браузера, поэтому у Chrome и Firefox формулировки различаются, но смысл один: парсер остановился на первом месте, которое не смог разобрать, и дальше документа не читал — остальные ошибки в нём могут быть следствием этой. Позицию движок указывает не всегда: если номера строки в сообщении нет, панель покажет только текст ошибки, и тогда причину ищите в начале документа.

Чем форматирование отличается от минификации?

Форматирование расставляет переводы строк и отступы, не меняя данные: документ остаётся тем же, но читается глазами. Минификация делает обратное — убирает пробелы между тегами и собирает документ в одну строку: файл получается меньше, его удобнее передавать и хранить. Значимый текст и CDATA при сжатии не трогаются, убираются только текстовые узлы из одних пробелов, поэтому `<a> </a>` в сжатом виде становится `<a/>`. Выбранный отступ действует только в режиме форматирования, а флажок про пустые узлы — там же: при сжатии таких узлов не остаётся по определению.

Что считается корректным XML?

Корневой элемент ровно один: второй элемент или текст на верхнем уровне — уже ошибка. Все открытые теги должны быть закрыты, причём в обратном порядке вложенности, а имена тегов чувствительны к регистру: `<book>` и `</Book>` — разные теги. Значения атрибутов всегда в кавычках, и один атрибут не может быть указан в теге дважды. Служебные символы в тексте и значениях экранируются: амперсанд как `&amp;`, угловая скобка как `&lt;`. Инструмент проверяет всё это и сообщает о первом нарушении с номером строки и позицией.

Поддерживаются ли пространства имён, CDATA и комментарии?

Да, всё это разбирает браузерный `DOMParser` — тот же разборщик, который открывает XML-документы в самом браузере. Пространства имён не теряются: в дереве и в результате имя остаётся с префиксом (`ns:tag`), а объявления `xmlns` видны среди атрибутов элемента. Элемент с CDATA форматирование оставляет одной строкой: перевод строки внутри изменил бы содержимое, а этого инструмент делать не должен. Комментарии в форматированном тексте остаются на своих местах, но в панель «Структура» не попадают — это дерево элементов, а не разметки целиком.

Почему XML разбирается в браузере, а не на сервере?

Разбор идёт тем разборщиком, который уже есть в браузере, поэтому документ никуда не отправляется: выгрузка из банка, конфиг приложения, ответ SOAP — всё остаётся на вашей машине. Серверный разбор означал бы, что файл нужно сначала передать по сети. Обратная сторона в том, что считать приходится в браузере: при обновлении вкладки введённый текст пропадёт, поэтому результат лучше сразу скачать кнопкой «Скачать .xml». Работать можно и без интернета — после загрузки страницы разбор от сети не зависит.

Можно ли отформатировать очень большой файл?

Жёсткого предела инструмент не задаёт: разбор идёт по всему документу, и на файлах в несколько мегабайт браузер начнёт заметно тормозить, потому что пересчёт запускается на каждое изменение текста, а в памяти вкладки лежат и исходник, и результат. Панель «Структура» в таком случае выводит первые 500 элементов, но счётчики в сводке считаются по всему документу. Если файл измеряется десятками мегабайт, удобнее консольная утилита: браузерная вкладка тут не лучший инструмент.