Отформатировать XML с отступами, сжать в одну строку и проверить корректность с указанием места ошибки. Показывает дерево элементов с атрибутами. Всё считается в браузере.
Форматирование расставляет отступы, сжатие убирает пробелы между тегами
Сколько пробелов на каждый уровень вложенности
Дерево появится, когда в поле выше будет корректный XML.
XML никуда не ушёл: это выгрузки из учётных систем и банков, конфиги приложений, ответы SOAP, схемы, файлы RSS, SVG и документы офисных форматов. Приходит такой документ редко в читаемом виде — чаще это одна длинная строка из генератора или, наоборот, текст с отступами, которые не совпадают с вложенностью, потому что его правили руками. Разбираться в обоих случаях тяжело: в одной строке не видно структуры, а в чужом форматировании — тем более.
Инструмент делает с документом три вещи: расставляет отступы, собирает в одну строку и проверяет корректность. Проверка идёт первой — разбирать сломанный документ нечем, поэтому при ошибке рядом с сообщением парсера показана строка исходного текста с отмеченным местом, а не просто слово «ошибка». Панель «Структура» показывает дерево элементов с атрибутами и текстом: по ней видно вложенность и то, какие данные в документе вообще есть, — это быстрее, чем вычитывать разметку глазами.
Разбирается всё браузерным разборщиком: документ не отправляется на сервер и не сохраняется. Поэтому сюда можно вставлять выгрузки с адресами клиентов, внутренние конфиги и переписку систем — данные остаются на вашей машине, а после загрузки страницы инструмент работает и без сети.
Вставьте документ в поле ввода — разбор идёт по мере ввода, без кнопки «Проверить». Если разобрать не удалось, появится панель «Ошибка разбора»: сообщение парсера дословно, пояснение к нему по-русски и строка исходного текста с отмеченным местом. Текст сообщения даёт движок браузера, поэтому у Chrome и Firefox формулировки различаются, но смысл один: парсер остановился на первом месте, которое не смог разобрать, и дальше документа не читал — остальные ошибки в нём могут быть следствием этой. Позицию движок указывает не всегда: если номера строки в сообщении нет, панель покажет только текст ошибки, и тогда причину ищите в начале документа.
Форматирование расставляет переводы строк и отступы, не меняя данные: документ остаётся тем же, но читается глазами. Минификация делает обратное — убирает пробелы между тегами и собирает документ в одну строку: файл получается меньше, его удобнее передавать и хранить. Значимый текст и CDATA при сжатии не трогаются, убираются только текстовые узлы из одних пробелов, поэтому `<a> </a>` в сжатом виде становится `<a/>`. Выбранный отступ действует только в режиме форматирования, а флажок про пустые узлы — там же: при сжатии таких узлов не остаётся по определению.
Корневой элемент ровно один: второй элемент или текст на верхнем уровне — уже ошибка. Все открытые теги должны быть закрыты, причём в обратном порядке вложенности, а имена тегов чувствительны к регистру: `<book>` и `</Book>` — разные теги. Значения атрибутов всегда в кавычках, и один атрибут не может быть указан в теге дважды. Служебные символы в тексте и значениях экранируются: амперсанд как `&`, угловая скобка как `<`. Инструмент проверяет всё это и сообщает о первом нарушении с номером строки и позицией.
Да, всё это разбирает браузерный `DOMParser` — тот же разборщик, который открывает XML-документы в самом браузере. Пространства имён не теряются: в дереве и в результате имя остаётся с префиксом (`ns:tag`), а объявления `xmlns` видны среди атрибутов элемента. Элемент с CDATA форматирование оставляет одной строкой: перевод строки внутри изменил бы содержимое, а этого инструмент делать не должен. Комментарии в форматированном тексте остаются на своих местах, но в панель «Структура» не попадают — это дерево элементов, а не разметки целиком.
Разбор идёт тем разборщиком, который уже есть в браузере, поэтому документ никуда не отправляется: выгрузка из банка, конфиг приложения, ответ SOAP — всё остаётся на вашей машине. Серверный разбор означал бы, что файл нужно сначала передать по сети. Обратная сторона в том, что считать приходится в браузере: при обновлении вкладки введённый текст пропадёт, поэтому результат лучше сразу скачать кнопкой «Скачать .xml». Работать можно и без интернета — после загрузки страницы разбор от сети не зависит.
Жёсткого предела инструмент не задаёт: разбор идёт по всему документу, и на файлах в несколько мегабайт браузер начнёт заметно тормозить, потому что пересчёт запускается на каждое изменение текста, а в памяти вкладки лежат и исходник, и результат. Панель «Структура» в таком случае выводит первые 500 элементов, но счётчики в сводке считаются по всему документу. Если файл измеряется десятками мегабайт, удобнее консольная утилита: браузерная вкладка тут не лучший инструмент.