ToolActToolAct

Инструмент форматирования XML

Ввод XML
Результат форматирования
Строк: 1Символов: 0Байт: 0
Строк: 1Символов: 0

Что такое форматирование XML?

XML Formatter превращает сжатый или неаккуратный XML в структуру с отступами, которую легче читать. XML встречается в конфигурациях, SOAP-сообщениях, sitemap, RSS-лентах, офисных документах, build-артефактах и старых корпоративных интеграциях, где один пропущенный закрывающий тег или неправильно экранированный символ может остановить обработку. Инструмент помогает быстрее увидеть вложенные элементы, атрибуты, текстовые узлы, пространства имен и вероятные места ошибок. Он полезен для отладки, документации, сравнения и обучения, но не заменяет проверку схемы, если требуется конкретный XSD, API-контракт или партнерский формат. Форматирование улучшает читаемость, но не делает неверный XML правильным. Для production-данных или кодовой базы результат все равно нужно проверить parser, тестами или правилами проекта.

Инструкция по использованию

Инструкция по использованию

  1. Вставьте или введите XML-данные в левое поле ввода
  2. Выберите размер отступа (2 пробела, 4 пробела или табуляция)
  3. Нажмите «Форматировать» для красивого оформления или «Минимизировать» для удаления пробелов
  4. Результаты отображаются справа с подсветкой синтаксиса
  5. Нажмите «Копировать» или «Скачать» для сохранения результата

Примечания к XML

  • Форматирование изменяет пробелы, а не смысл документа, но пробелы всё же могут иметь значение внутри текстовых узлов и документов со смешанным содержимым.
  • Если разбор не удался, проверьте незакрытые теги, несоответствие вложенности, дублирующиеся атрибуты и неэкранированные символы, такие как амперсанды.

Применение

Форматируйте сжатый XML после проверки на корректностьВставьте минифицированную ленту, SOAP-сообщение, карту сайта, фрагмент SVG или ответ устройства — браузерный XML-парсер проверит его перед выводом результата. Корректный XML будет развернут с отступами в 2 пробела, 4 пробела или табуляции, чтобы вложенные элементы стало намного проще изучить.
Сохраняйте читаемость объявлений, комментариев, CDATA и самозакрывающихся теговФорматировщик обрабатывает инструкции, комментарии, блоки CDATA, объявления, закрывающие теги, текстовые узлы и самозакрывающиеся теги отдельно, а не как обычный текст. Конфигурационные файлы и примеры интеграций сохраняют свои специальные XML-секции на виду.
Создавайте читаемый XML или компактный вариант для передачиИспользуйте режим форматирования при проверке иерархии и режим сжатия при подготовке компактного содержимого для примеров, тестовых данных или передачи. Ошибки разбора отображаются с указанием строки и столбца, а проверка схемы и бизнес-правил остаётся на стороне целевой XML-системы.
Найдите пропущенный тег по позиции ошибки парсераКогда страница сообщает об ошибке разбора, обратите внимание на строку и столбец, затем посмотрите чуть выше — там может быть незакрытый родительский тег или лишний закрывающий тег. Форматировщик исправляет только пробелы, поэтому настоящий структурный ремонт нужно внести в исходный код вручную перед повторным форматированием. Самозакрывающиеся теги вроде `
` (фича SGML, принятая в XML 1.0) сохраняются как есть, поэтому пустые элементы HTML внутри XHTML или RSS должны содержать косую черту; запись `

` тихо изменит страницу в парсерах HTML5. Секции CDATA, включая правило терминатора `]]>`, также сохраняются без раскрытия в сущности `&`.
Приведите в порядок фрагмент SVG перед встраиванием в разметкуВставьте однострочный SVG, разверните его с отступом в 2 пробела и убедитесь, что данные path, viewBox и объявления пространств имён на месте. Отформатированный SVG можно встроить в HTML без нарушения формы, а иерархия упрощает отладку атрибутов transform или gradient. Согласно спецификации W3C XML 1.0, порядок атрибутов на элементе не является каноническим, поэтому при форматировании id и class могут оказаться в другом порядке, а префикс пространства имён, объявленный как xmlns:svg на корневом элементе svg, должен остаться там, иначе браузер не распознает дочерние элементы. Объявление XML, начинающееся с <?xml version, необязательно для инлайнового SVG в HTML, но обязательно для самостоятельных XML-лент.

Технический принцип

Форматирование XML основано на рекомендации W3C XML 1.0 (пятое издание). Разбор выполняется через `new DOMParser().parseFromString(src, 'application/xml')` (или `text/xml`), который возвращает Document, узлы которого соответствуют семи продукциям, определённым в спецификации: Element, Attr, Text, CDATASection, Comment, ProcessingInstruction и DocumentType. В отличие от HTML, XML-парсеры строги: несовпадающий тег, неэкранированный `&` или дублирующийся атрибут прерывают разбор, и DOMParser возвращает элемент `<parsererror>`, тело которого содержит строку и столбец. Серверные аналоги включают libxml2 (`xmllint --format`), `xml.etree.ElementTree` на Python, StAX/SAX на Java и `XmlReader` на .NET. Принтер сериализует DOM поузлово: каждый Element открывается на отдельной строке с отступом depth*indent, дочерние элементы рекурсивно обрабатываются с depth+1, закрывающий тег выравнивается с открывающим, а пустые элементы сворачиваются в самозакрывающееся сокращение `<foo/>`, которое §3.1 спецификации объявляет семантически эквивалентным `<foo></foo>`. Пять предопределённых сущностей всегда перекодируются в текстовых значениях и значениях атрибутов: `&amp;` `&lt;` `&gt;` `&quot;` `&apos;`. Секции CDATA (`<![CDATA[ ... ]]>`) сохраняются дословно, поскольку они являются явным механизмом экранирования для содержимого, которое иначе потребовало бы кодирования сущностей; терминатор `]]>` не может появляться внутри блока CDATA согласно §2.7, что обеспечивается парсером. Инструкции обработки вроде `<?xml-stylesheet?>` и объявление XML `<?xml version="1.0" encoding="UTF-8"?>` сохраняются в прологе документа. Объявление DOCTYPE передаётся как единая строка. Две тонкости определяют основную сложность форматировщика. Во-первых, смешанное содержимое — элемент, содержащий одновременно текст и дочерние элементы, например `<p>Hello <b>world</b>!</p>`, — не может быть переформатирован с отступами без изменения инфосета документа, поскольку каждый пробельный символ в таком контексте является значимым текстовым узлом. Форматировщики определяют смешанное содержимое, проверяя, есть ли у Element непробельные текстовые дочерние узлы, и переключаются на однострочную сериализацию для этого поддерева. Во-вторых, объявления пространств имён (`xmlns`, `xmlns:prefix`) должны оставаться на элементе, где они впервые объявлены; их перемещение изменяет область видимости. Порядок атрибутов не является каноническим согласно спецификации, поэтому большинство форматировщиков применяют алфавитную сортировку, сохраняя любые начальные объявления `xmlns:*`. Разбор и сериализация выполняются за O(n) от длины документа; очень большие ленты обычно обрабатываются потоково через SAX, а не построением DOM в памяти.

  • Спецификация: W3C XML 1.0 пятое издание (REC-xml-20081126); DOM строится через `DOMParser().parseFromString(src, 'application/xml')`, аналогично libxml2 или `xmllint --format` на сервере.
  • Строгость по замыслу: несовпадающие теги, неэкранированные `&`/`<`, дублирующиеся атрибуты или недопустимые символы вызывают элемент `<parsererror>`; прощающее восстановление HTML не применяется.
  • Пять предопределённых сущностей перекодируются в текстовых значениях и значениях атрибутов: `&amp;` `&lt;` `&gt;` `&quot;` `&apos;`. Числовые ссылки на символы вроде `&#10;` сохраняются как есть.
  • Самозакрывающийся `<foo/>` и `<foo></foo>` семантически идентичны согласно §3.1; секции CDATA сохраняются дословно и не могут содержать терминатор `]]>`.
  • Смешанное содержимое (текст + дочерние элементы) не может быть переформатировано с отступами без изменения инфосета — принтер определяет значимые пробелы и сериализует такие поддеревья в строку.
  • Объявления пространств имён (`xmlns`, `xmlns:prefix`) остаются на элементе первого объявления; их перемещение изменяет область видимости. Порядок атрибутов не является каноническим, поэтому типична стабильная сортировка (сначала xmlns, затем по алфавиту).
  • Сложность: O(n) на разбор и O(n) на сериализацию для инструментов на основе DOM; большие документы обрабатываются потоково через SAX/StAX (xml.sax в Python, javax.xml.stream в Java) для избежания загрузки всего дерева в память.

Примеры

Базовые элементы

<!-- Вход (одна строка) -->
<book><title>XML Guide</title><author>Jane Doe</author><year>2024</year></book>

<!-- Выход (2 пробела) -->
<book>
  <title>XML Guide</title>
  <author>Jane Doe</author>
  <year>2024</year>
</book>

С атрибутами

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <book id="b001" lang="en" available="true">
    <title>Effective XML</title>
    <price currency="USD">29.99</price>
  </book>
</catalog>

Вложенная структура с пространствами имён и CDATA

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns:GetUser xmlns:ns="https://example.com/api">
      <ns:UserId>10086</ns:UserId>
      <ns:Script>
        <![CDATA[ if (a < b && b > 0) { return true; } ]]>
      </ns:Script>
    </ns:GetUser>
  </soap:Body>
</soap:Envelope>

Часто задаваемые вопросы

Что делает этот инструмент?

Форматирует XML с отступами для вложенных элементов, размещает каждый элемент на отдельной строке и выравнивает закрывающие теги. Удобно для разбора SOAP-ответов, RSS-лент, конфигурационных файлов и других XML-данных, которые пришли одной длинной строкой.

Проверяет ли он соответствие схеме?

Нет. Он форматирует любой well-formed XML, который вы вставите. Проверка по схеме (XSD, DTD, RELAX NG) требует отдельного инструмента. Об ошибках well-formedness (несовпадающие теги, пропущенные закрывающие скобки) сообщается, но страница их не исправит.

Сохраняет ли он порядок атрибутов?

Да. По спецификации порядок атрибутов в XML не значим, но форматтер сохраняет исходный порядок, чтобы не удивлять вас. Секции CDATA, комментарии и инструкции обработки также сохраняются.

Как обрабатываются пробелы?

Пробельные символы между элементами нормализуются (один элемент на строку с отступом). Пробелы внутри текстового содержимого по умолчанию сохраняются — содержимое элемента значимо. Атрибут xml:space='preserve' учитывается там, где он указан.

Можно ли минифицировать XML?

Некоторые сборки предлагают режим минификации, удаляющий пробелы между элементами. Будьте осторожны: значимые пробелы (текстовое содержимое, области с xml:space='preserve') должны сохраняться. Если в вашем XML есть форматированный текст, проверьте результат на полный цикл.

Загружается ли XML на сервер?

Нет. Парсинг и красивое форматирование выполняются в вашем браузере с помощью DOMParser и XMLSerializer (встроенных в браузер). Ничего не передаётся.

Как обстоит дело с пространствами имён XML?

Объявления пространств имён (xmlns) и элементы/атрибуты с префиксами форматируются ровно так, как написаны. Повторное объявление того же пространства имён во вложенных элементах сохраняется (некоторые валидаторы это учитывают, другие — нет).

Похожие инструменты

Инструмент форматирования JSON

Онлайн-инструмент для форматирования JSON с подсветкой синтаксиса, обнаружением ошибок и сжатием. Одним нажатием форматируйте JSON данные, быстро находите ошибки формата.

Инструмент форматирования HTML

Онлайн-инструмент для форматирования HTML с подсветкой синтаксиса и сжатием. Одним нажатием упорядочите беспорядочный HTML код.

Инструмент форматирования YAML

Онлайн-инструмент для форматирования YAML с проверкой синтаксиса, автоматическим отступом и конвертацией формата. Легкая обработка конфигурационных файлов.

Конвертер XML в JSON

Бесплатный онлайн-конвертер XML в JSON с настраиваемыми отступами. Мгновенное преобразование данных XML в форматированный JSON в браузере.

Конвертер JSON в XML

Бесплатный онлайн-конвертер JSON в XML с настраиваемым корневым элементом и отступами. Мгновенно конвертируйте JSON-данные в форматированный XML в вашем браузере.

Инструмент форматирования CSS

Онлайн-инструмент для форматирования CSS с подсветкой синтаксиса и сжатием. Одним нажатием упорядочите таблицы стилей CSS.