Как форматировать и валидировать XML в браузере (бесплатно)
Зачем форматировать XML, что на самом деле значит «правильно оформленный» и как сделать XML читаемым, проверить и минифицировать без установки программ.
XML многословен по своей природе, и то, в каком виде он обычно приходит, только усугубляет дело. API отдаёт ответ SOAP одной строкой на 4000 символов, или файл конфигурации сохраняется с поехавшими отступами — и вот вы всматриваетесь в стену угловых скобок, пытаясь найти единственный тег не на своём месте. Форматировщик XML приводит всё в читаемый вид.
Что значит «правильно оформленный»
Часто говорят «валидный XML», хотя имеют в виду «правильно оформленный» (well-formed). Это не одно и то же. Правильная форма — минимальное требование: каждый открытый тег закрыт, теги вложены без пересечений, значения атрибутов стоят в кавычках. Валидность идёт дальше: документ ещё и соответствует схеме (DTD или XSD), которая задаёт, какие элементы где допустимы.
Инструмент проверяет первое. Напишите <a><b></a></b> — он остановится и сообщит, что ожидал </b>, а встретил </a>. Одна эта проверка ловит большинство ошибок, из-за которых парсер падает, потому что пересечённый или пропущенный тег — самая частая причина, по которой XML не загружается.
Форматирование против минификации
Две кнопки, противоположные задачи.
«Форматировать» берёт плотный XML и раскладывает его: по одному элементу на строку, вложенные потомки с отступом на два пробела глубже родителя. <note><to>Tove</to></note> превращается в три читаемые строки. Текст прямо внутри тега, вроде <to>Tove</to>, остаётся на одной строке, а не разрывается, — так короткие значения проще охватить взглядом.
«Минифицировать» делает обратное. Убирает пробелы и переносы между тегами и возвращает одну строку. Это то, что нужно перед вставкой XML в строку JSON, в параметр URL или туда, где лишние переносы только добавят байтов. Отформатированный файл на 40 КБ часто опускается ниже 30 КБ, стоит убрать отступы.
Что остаётся нетронутым
Форматировщик, который наводит порядок слишком рьяно, может незаметно испортить документ. Этот намеренно не трогает три вещи:
- Всё, что внутри кавычек:
<img src="a/b.png">сохраняет и слэш, и пробелы. - Комментарии.
<!-- TODO: проверить -->переносится байт в байт. - Блоки CDATA. Содержимое в
<![CDATA[ ... ]]>, часто сырой HTML или фрагмент кода, проходит насквозь и не экранируется заново.
Эти три правила и отделяют переформатирование от случайного изменения смысла.
Работает в браузере
Есть практическая причина следить за тем, где это выполняется. XML-ленты несут то, что не хочется вставлять на случайный сайт: ключи API в конфиге, записи клиентов в выгрузке, SOAP-запрос внутренней службы. Здесь разбор идёт на JavaScript на вашей машине. Ничего не загружается на сервер, ничего не логируется. Загрузите страницу один раз, отключите сеть — она продолжит работать.
Быстрый приём для отладки
Когда ответ XML не парсится в коде, быстрее всего сначала вставить его в форматировщик. Либо он форматируется чисто — значит, дело в моём разборе, а не в данных, — либо указывает на конкретный непарный тег, и я нахожу ошибку за десять секунд вместо того, чтобы вычитывать сырой текст глазами.
Вставьте свой XML в Форматировщик XML — он расставит отступы, проверит и минифицирует на месте, и ничто не покинет ваш браузер.