Форматировать XML
Превратите сплошную стену XML в читаемый текст с отступами — или сожмите обратно. Комментарии, секции CDATA и пространства имён остаются нетронутыми. Ничего не сохраняется.
- Не сохраняется
- Без очереди и ожидания
- Без регистрации и водяных знаков
Здесь появится отформатированный XML.
Как это работает
Вставьте XML
Или перетащите файл .xml, .svg, .rss или .xsd. Он не сохраняется.
Выберите отступ
Два пробела, четыре, табуляция или минификация в одну строку.
Скопируйте или скачайте
Если XML повреждён, вместо результата вы увидите номер строки и столбца.
Почему переформатировать XML рискованнее, чем кажется
Пробелы в XML по умолчанию значимы, и именно на этом многие попадаются. В отличие от JSON, где форматирование ничего не меняет, XML-парсер обязан сообщать о пробелах и переводах строк между элементами как о текстовом содержимом — и только схема, если она есть, говорит, что их можно игнорировать. Поэтому новые отступы действительно меняют документ. Для большинства конфигурационных файлов и файлов с данными это неважно, а в документах со смешанным содержимым — где текст и элементы стоят рядом, как в XHTML или DocBook, — это может изменить смысл написанного.
Поэтому форматирование здесь не трогает то, что трогать нельзя. Элемент с атрибутом xml:space="preserve" сохраняет содержимое в точности как написано — этот атрибут для того и существует. Секции CDATA передаются без изменений: они предназначены для текста, который нельзя интерпретировать, и переформатирование внутри них его испортит. Ссылки на сущности остаются ссылками и не раскрываются в символы, которые они обозначают.
Пространства имён сохраняются в точности как написаны — префиксы, объявления и привязанные к ним элементы. Звучит очевидно, но это не так: форматтер, который нормализует префиксы или переносит объявления туда, где им, по его мнению, место, выдаёт формально эквивалентный документ, который ломается в инструментах, сверяющих префиксы буквально. Порядок атрибутов тоже сохраняется, хотя для XML он ничего не значит, — по той же причине: сравнение с предыдущей версией ценнее аккуратности.
При форматировании проверяется корректность синтаксиса (well-formedness): все теги закрыты и правильно вложены, корневой элемент один, символы допустимы, амперсанды и угловые скобки экранированы. Это нижняя из двух планок XML. Документ может быть синтаксически безупречным и всё равно не соответствовать своему DTD или схеме — и никакое форматирование этого не покажет.
Если нужно другое
xmllint --format in.xml делает то же самое в командной строке и уже установлен в большинстве Unix-систем; xmlstarlet fo --indent-tab даёт больше контроля над самими отступами. Оба справляются с файлами гораздо больше тех, что страница может удержать в памяти.
Если документ нужно сравнивать, подписывать или хранить в каноническом виде, форматирование — вообще не та операция. Каноническая форма XML — xmllint --c14n — даёт единственный нормализованный вид, к которому сводятся два эквивалентных документа; на нём держатся цифровые подписи XML. Красивое форматирование подписанного документа ломает подпись — и это самый дорогой способ об этом узнать.
Частые вопросы
Мой XML где-нибудь сохраняется?
Нет. Запросов к серверу и журналов нет, ничего не сохраняется. После загрузки страницы можно отключиться от интернета — всё продолжит работать. Здесь это важнее, чем кажется: в онлайн-форматтеры вставляют ответы API, конфигурационные файлы и сообщения об ошибках, а в них часто оказываются токены, данные клиентов и внутренние имена хостов.
Что сохраняется при форматировании?
Комментарии, секции CDATA, инструкции обработки, XML-декларация и все префиксы пространств имён. Порядок атрибутов остаётся как написан. Элемент, содержащий только текст, остаётся в одной строке: разбить <title>Hello</title> на три строки — не красивее, а в документе со смешанным содержимым это изменило бы сам текст.
Изменят ли отступы смысл моего XML?
В элементе, который содержит только другие элементы, — нет. Но в XML нет общего правила, что пробелы незначимы: в смешанном содержимом, где текст и элементы стоят рядом, добавленные пробелы СТАНОВЯТСЯ частью текста. Поэтому элементы только с текстом здесь не разбиваются на строки. Если в документе есть настоящее смешанное содержимое и пробелы в нём важны, безопаснее минифицировать.
Подходит ли это для HTML?
Только если HTML — корректный XML, а реальный HTML обычно таким не является. Незакрытые теги <br>, <img> и <li>, атрибуты без кавычек и одиночные амперсанды допустимы в HTML и недопустимы в XML. Здесь работает строгий XML-парсер, поэтому он сообщит об этом как об ошибках, а не будет угадывать. XHTML и SVG форматируются идеально.
А SVG?
Да — SVG это XML, и так удобно читать минифицированный файл. Контуры, градиенты и встроенные стили проходят без изменений; меняются только пробелы между элементами.
Есть ли ограничение по размеру?
Ограничивает доступная память, а не лимит с нашей стороны. Документы в несколько мегабайт форматируются мгновенно; очень большие упираются в то, сколько можно удержать в памяти одновременно, а не в какие-то наши ограничения.
Полезно знать: Только проверка корректности синтаксиса (well-formedness). Документ проверяется на парность тегов, правильную вложенность и допустимые символы и заново получает отступы, но DTD или XSD не загружаются и не применяются: файл может отлично отформатироваться и всё равно не соответствовать своей схеме. Пространства имён сохраняются в точности как написаны.
Разместите этот инструмент на своём сайте
Бесплатно для любого блога, страницы класса или справочной статьи. Вставьте один фрагмент кода — и посетители смогут пользоваться инструментом прямо на вашей странице.