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 ошибка, результат появится, как только её исправите, а пока справа будет первая ошибка с местом и кнопка «Все ошибки».
В 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 нет, запишется кодом вида ≠, и мы об этом предупредим.
Почему некоторые элементы остались в одну строку
В них текст перемежается тегами или стоит xml:space="preserve". Переносы внутри такого элемента изменили бы данные, поэтому он остаётся как в исходнике.
Можно ли отформатировать XML с ошибкой
Нет: пока теги не закрыты как положено, непонятно, что во что вложено. Покажем первую ошибку с местом, а все сразу — в режиме «Проверка».
Как сжать XML обратно в одну строку
Нажмите «В строку» над результатом: пробелы между элементами исчезнут, комментарии и текст останутся. Обратно — выберите 2, 4 или Tab.
Чем XML formatter отличается от XML beautify и pretty print
Ничем: это три названия одной операции — расставить переносы и отступы, чтобы документ читался. Данные при этом не меняются.