Форматировщик и валидатор XML

Вставьте XML, форматируйте с корректным отступом или валидируйте синтаксис. Обрабатывает атрибуты и пространства имён. Без загрузки.

  1. Вставьте свой XML в текстовое поле слева.
  2. Нажмите «Форматировать», чтобы пропустить через fast-xml-parser и получить XML с отступами.
  3. Нажмите «Валидировать», чтобы проверить well-formedness без изменения ввода.
  4. Ошибки указывают на проблемную позицию в документе.
Что это делает?

Парсит XML с помощью fast-xml-parser и заново выводит с согласованными отступами. Порядок атрибутов внутри каждого элемента сохраняется; вложенность элементов сохраняется в точности. Смешанное содержимое (текст + дочерние элементы) и пространства имён (prefix:tag) остаются нетронутыми. Вывод — well-formed XML, но well-formed — не то же самое, что valid (для validity нужны schema или DTD, которые этот инструмент не проверяет).

Пример

Беспорядочный XML-ввод:

<root version="1"><name>Ada</name><tags>math</tags><tags>logic</tags></root>

Отформатированный вывод:

<root version="1">
  <name>Ada</name>
  <tags>math</tags>
  <tags>logic</tags>
</root>

Типичные ошибки XML и как их исправить

Правила well-formedness XML строже, чем у HTML. Шаблоны ниже покрывают большинство сбоев парсера.

  • Незакрытый тег. `<a><b></a>` невалиден — `<b>` должен быть закрыт (`<b/>` или `</b>` где-то). XML не разрешает HTML-стиль необязательных закрывающих тегов.
  • Несовпадение регистра. XML чувствителен к регистру — `<Foo></foo>` — два разных имени тега. Совпадайте по регистру в точности.
  • Неэкранированные спецсимволы. Буквальный `<`, `>`, `&` или кавычка внутри текста или значения атрибута должны быть экранированы: `&lt;`, `&gt;`, `&amp;`, `&quot;`. Оборачивайте данные с такими символами в CDATA: `<![CDATA[...]]>`.
  • Несколько корней. XML требует ровно один корневой элемент. `<a/><b/>` на верхнем уровне невалидно — оборачивайте: `<root><a/><b/></root>`.
  • Невалидное имя элемента. Имена элементов не могут начинаться с цифры, содержать пробелы или использовать зарезервированные символы (`< > & " \'`). Имена, начинающиеся с `xml` (любого регистра), зарезервированы спецификацией.
  • Несовпадающие кавычки вокруг атрибутов. `<a name="value\'>` смешивает двойные и одинарные кавычки. Выберите один стиль последовательно для каждого атрибута. Любой из них — валидный XML.
Часто задаваемые вопросы

Меняет ли форматирование мои данные?

Только пробелы между элементами. Порядок элементов, порядок атрибутов, значения атрибутов, текстовое содержимое и обрамление CDATA сохраняются. Самозакрывающаяся форма (`<x/>`) и явная форма (`<x></x>`) могут нормализоваться.

Сохраняются ли XML-комментарии?

fast-xml-parser удаляет комментарии по умолчанию. Если нужно форматирование с сохранением комментариев, используйте другой инструмент (XSLT identity transform или `xmllint --format`).

Валидирует ли это против схемы?

Нет. Это проверяет только well-formedness — что документ парсится как синтаксически валидный XML. Валидация по схеме (XSD, DTD, RelaxNG) — отдельный шаг, требующий схему как дополнительный ввод.

Как обрабатываются пространства имён?

Префиксы пространств имён сохраняются как часть имени элемента (`x:foo`). Объявления пространств имён по умолчанию и привязки префиксов сохраняются как атрибуты. Namespace-aware-обработка (разрешение URI) не выполняется.

Загружается ли мой XML?

Нет. Всё работает в вашем браузере — ваш ввод парсится и сериализуется JavaScript на этой странице и не отправляется ни на какой сервер.

Можно ли настроить отступ?

Сейчас зафиксировано 2 пробела на уровень. Чтобы настроить, запустите fast-xml-parser в командной строке — та же библиотека — и передайте `{ indentBy: " " }` или любую другую строку.