Как работает XML форматтер
Страница разбирает ваш XML на части: теги, атрибуты, текст, комментарии, секции CDATA, инструкции обработки вроде <?xml …?> и doctype. Затем записывает их заново, каждый элемент в своей строке, с отступом на один уровень на каждый уровень вложенности: 2 пробела, 4 пробела или табуляция. «Сжать» делает обратное и убирает пробельные символы между тегами.
Меняются только пробельные символы между тегами. Текст сохраняется символ в символ, атрибуты остаются в своём порядке и в своих кавычках, а комментарии, CDATA и doctype копируются как написано. Там, где текст смешан с тегами, как в <p>Hello <b>world</b></p>, или где задан xml:space="preserve", пробелы важны, поэтому эта часть остаётся ровно такой, какой была.
Для проверки страница также передаёт ваш XML встроенному в браузер парсеру XML (DOMParser), тому же, что читает файлы RSS и SVG. Он проверяет, что документ синтаксически корректен: один корневой элемент, каждый тег закрыт в правильном порядке, атрибуты в кавычках, ни один атрибут не повторяется, только известные сущности. Ошибки показываются со строкой и столбцом. Проверки по схеме (XSD или DTD) нет, внешние файлы не загружаются никогда.
Пример
Небольшая конфигурация, сжатая в одну строку:
<?xml version="1.0"?><config><!-- web tier --><server name="web-1" port="443"><tls enabled="true"/><root>/var/www</root></server></config>С отступом в 2 пробела она превращается в версию ниже. Комментарий, самозакрывающийся тег <tls/> и порядок атрибутов не меняются; если сжать её снова, получится в точности строка выше.
<?xml version="1.0"?>
<config>
<!-- web tier -->
<server name="web-1" port="443">
<tls enabled="true"/>
<root>/var/www</root>
</server>
</config>Вопросы
Как отформатировать XML?
Вставьте его в поле выше или откройте файл и выберите 2 пробела, 4 пробела или табуляцию. Отформатированный XML появляется справа по мере ввода; скопируйте его или скачайте файлом. В командной строке то же самое делает xmllint --format file.xml в Linux и macOS.
Как проверить, корректен ли XML?
Вставьте его выше: страница сообщит, синтаксически ли он корректен (well-formed), а если нет — покажет строку, столбец и причину, например несовпадающий закрывающий тег. Well-formed означает, что синтаксис правильный. Проверка по схеме (XSD или DTD) — отдельный шаг, например xmllint --schema schema.xsd file.xml.
Меняет ли форматирование мой XML?
Только пробельные символы между тегами, которые программы для XML обычно игнорируют. Текст, значения атрибутов и их порядок, комментарии, CDATA, инструкции обработки и doctype остаются в точности как написаны. Смешанное содержимое (текст с тегами внутри) и всё под xml:space="preserve" не затрагивается вовсе, потому что там пробелы могут быть важны.
Чем отличается well-formed XML от valid XML?
Well-formed XML следует правилам синтаксиса: один корневой элемент, каждый тег закрыт и правильно вложен, значения атрибутов в кавычках, ни один атрибут не повторяется. Valid XML — это well-formed XML, который к тому же следует схеме или DTD, где сказано, какие элементы и атрибуты разрешены. Парсер прочитает любой well-formed файл; только валидация подтверждает правильную структуру.
Безопасно ли вставлять сюда XML с паролями или ключами?
Да. Форматирование и проверка выполняются в вашем браузере, и ничего из вставленного не отправляется на сервер и не сохраняется. Парсер XML браузера также не загружает внешние DTD и сущности. При закрытии вкладки текст исчезает.