Форматирование XML онлайн

Расставит отступы и не тронет данные

Исходный XML
Можно нажать Ctrl V или перетащить файл — результат появится справа
Пусто
Результат

Как пользоваться

  1. Вставьте XML в поле «Исходный» или перетащите файл
  2. В результате сразу появится XML с отступами, ошибки подсветятся в исходном
  3. Выберите отступ: 2 или 4 пробела или табуляция
  4. Скопируйте результат или скачайте файл с суффиксом .formatted.xml

Примеры

SOAP-ответ одной строкой

Сервис вернул ответ без единого переноса, и в логе непонятно, где кончается заголовок и начинается тело. После форматирования видно конверт Envelope, тело Body и статус заказа внутри. Префиксы пространств имён остаются как в исходнике.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetOrderResponse xmlns="http://example.com/orders"><Order id="1057"><Status>paid</Status><Total currency="RUB">1490.00</Total></Order></GetOrderResponse></soap:Body></soap:Envelope>

Выгрузка товаров из 1С

Файл обмена с сайтом в формате CommerceML приходит одним блоком. Отформатированный, он читается как список: у каждого товара видны Ид, артикул и наименование. Файл скачается в той же кодировке, что объявлена в первой строке.

<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация ВерсияСхемы="2.10"><Каталог><Товары><Товар><Ид>4f1c-0017</Ид><Артикул>00-00012345</Артикул><Наименование>Кабель ВВГнг 3х2,5</Наименование></Товар></Товары></Каталог></КоммерческаяИнформация>

Текст с разметкой внутри

В описании товара текст перемежается тегами. Такой элемент выводится как в исходнике, без переносов внутри, иначе между словами появились бы лишние пробелы и описание на сайте изменилось бы.

<offer id="A-102">
  <description>Автомат <b>С16</b> для щитов, <i>1 полюс</i></description>
</offer>

Что меняет форматирование, а что нет

Меняются только пробелы и переносы между элементами: каждый элемент встаёт на свою строку с отступом по вложенности. Атрибуты остаются в строке с тегом, в том же порядке и с теми же кавычками. Пустой элемент записывается, как в исходнике: <a/> или <a></a>.

Текст внутри элементов не меняется ни на символ. Пробелы в «ООО Ромашка» останутся двумя, CDATA и комментарии будут на своих местах. Элементы со смешанным содержимым и с атрибутом xml:space="preserve" выводятся как написаны — для XML это значимые пробелы.

Если в XML ошибка, результат появится, как только её исправите, а пока справа будет первая ошибка с местом и кнопка «Все ошибки».

Было
<Товар><Ид>4f1c-0017</Ид><Цена>87.50</Цена><!-- без НДС --></Товар>
Стало
<Товар>
  <Ид>4f1c-0017</Ид>
  <Цена>87.50</Цена>
  <!-- без НДС -->
</Товар>

Как отформатировать XML в VS Code, Notepad++ и в коде

В VS Code для XML нужно расширение, например XML от Red Hat. После установки откройте файл и нажмите Shift+Alt+F на Windows, Shift+Option+F на macOS или Ctrl+Shift+I на Linux.

В Notepad++ поставьте плагин XML Tools через «Плагины» → «Управление плагинами», затем выберите «Плагины» → XML Tools → Pretty print. В терминале подойдёт xmllint --format file.xml из пакета libxml2.

В Python 3.9 и новее есть xml.etree.ElementTree.indent(tree): отступы расставляются прямо в дереве перед записью. Старый способ, minidom.parseString(text).toprettyxml(), к уже отформатированному файлу добавляет пустые строки. В lxml pretty_print=True работает, только если документ разобран с remove_blank_text=True. В JavaScript встроенного форматирования XML нет — нужна библиотека.

Учтите, что редакторы и xmllint умеют по-разному переносить длинный текст и атрибуты. Если важно не изменить ни одного значения, сверьте результат или форматируйте здесь.

Форматирование и электронная подпись

УПД, счета-фактуры и отчёты в налоговую подписывают электронной подписью, а она проверяется по исходному файлу байт в байт. Отформатированная копия по данным та же, но лишний пробел или перенос делает её для подписи другим файлом: проверка не пройдёт.

Читайте документ здесь, а отправляйте контрагенту, оператору ЭДО или в налоговую оригинал. Исходный файл на диске мы не меняем.

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

Куда уходят мои файлы

Никуда. XML обрабатывается в браузере, запросы на чужие адреса запрещены заголовком безопасности. Документы ЭДО и отчётность с ИНН и суммами не покидают ваш компьютер.

Сохранится ли кодировка windows-1251

Да. Мы читаем объявление encoding в первой строке, открываем файл в этой кодировке и в ней же сохраняем результат. Символ, которого в windows-1251 нет, запишется кодом вида &#8800;, и мы об этом предупредим.

Почему некоторые элементы остались в одну строку

В них текст перемежается тегами или стоит xml:space="preserve". Переносы внутри такого элемента изменили бы данные, поэтому он остаётся как в исходнике.

Можно ли отформатировать XML с ошибкой

Нет: пока теги не закрыты как положено, непонятно, что во что вложено. Покажем первую ошибку с местом, а все сразу — в режиме «Проверка».

Как сжать XML обратно в одну строку

Нажмите «В строку» над результатом: пробелы между элементами исчезнут, комментарии и текст останутся. Обратно — выберите 2, 4 или Tab.

Чем XML formatter отличается от XML beautify и pretty print

Ничем: это три названия одной операции — расставить переносы и отступы, чтобы документ читался. Данные при этом не меняются.

Другие инструменты