Красиво печатайте XML с отступами в 2 пробела, 4 пробела или табуляцию, либо минифицируйте в одну строку. Проверка на корректность выполняется по мере ввода, показывается количество элементов и глубина вложенности.
Сделайте стену XML читаемой или упакуйте обратно. Вставьте XML, чтобы переформатировать его с предпочитаемыми отступами, или минифицируйте в одну строку. Документ проверяется на корректность по мере ввода, а счётчики показывают, сколько элементов он содержит и насколько глубоко вложен.
–
Форматирование XML без его поломки
Пробельные символы в XML — это содержимое
Это единственный факт, отличающий форматирование XML от форматирования JSON. В JSON пробелы между токенами не имеют значения, и их удаление всегда безопасно. В XML символы между <name> и Ada являются частью текстового узла элемента. Переформатирование документа технически меняет то, что он содержит.
На практике это почти никогда не важно, поскольку подавляющее большинство XML использует контент только из элементов — элементы, содержащие другие элементы и больше ничего, — где окружающие пробелы игнорируются любой схемой. Форматировщик добавляет отступы только внутри таких элементов. Когда элемент содержит реальный текст или смесь текста и дочерних элементов, как это делает HTML-разметка, его содержимое оставляется ровно таким, каким было найдено. Это единственное правило не даёт <p>Hello <b>there</b></p> незаметно обрести пробелы вокруг there.
«Корректно сформированный» — не то же, что «допустимый»
Проверка, выполняемая здесь, — это корректность формирования (well-formedness), которую спецификация XML требует от каждого парсера: один корневой элемент, каждый тег закрыт и правильно вложен, значения атрибутов взяты в кавычки, а & и < экранированы внутри текста. Если что-то из этого нарушено, документ отклоняется целиком — XML, в отличие от HTML, знаменит отсутствием восстановления после ошибок.
Допустимость — это дальнейший шаг: она спрашивает, соответствует ли документ схеме DTD, XSD или RelaxNG, так что <invoice> действительно содержит <total>, а дата действительно является датой. Для этого требуется схема, которая не является частью вставляемого документа. Зелёный результат здесь означает, что синтаксис корректен и любой парсер примет файл. Это не означает, что принимающая система сочтёт содержимое правильным.
Минификация и самозакрывающиеся теги
Минификация удаляет игнорируемые пробелы между элементами и помещает весь документ в одну строку. Поскольку эти пробелы никогда не были содержимым, вывод, начавшийся как разметка только из элементов, разбирается в точно то же дерево.
Другая экономия исходит от пустых элементов: <summary></summary> и <summary/> определены спецификацией как идентичные, и на выводе используется более короткая форма. Выгода реальна, но скромна — XML платит большую часть своего размера повторяющимися именами тегов, поскольку каждый элемент пишет своё имя дважды. Если файл должен быть действительно меньше, ответ — gzip; он обрабатывает эти повторяющиеся имена гораздо лучше, чем любое удаление пробелов. Обязательно сохраняйте отформатированную копию для чтения, поскольку минифицированный XML практически нечитаем для человека.
Часто задаваемые вопросы
Загружается ли мой XML куда-либо?
Нет. Документ разбирается и сериализуется в вашем браузере с помощью встроенного DOMParser, поэтому ничего не отправляется на сервер.
Меняет ли форматирование мой документ?
Только внутри элементов, которые содержат только другие элементы, где пробелы игнорируются. Элементы с текстом или смешанным содержимым остаются нетронутыми.
Проверяет ли это соответствие схеме?
Нет. Он проверяет корректность формирования — закрытые и правильно вложенные теги, один корень, экранированные символы. Проверка соответствия DTD или XSD требует саму схему.
Почему мой документ отклонён?
Обычно это незакрытый или несоответствующий тег, неэкранированные & или <, значение атрибута без кавычек или больше одного корневого элемента. В XML нет восстановления после ошибок.
Что означают счётчики элементов и глубины?
Элементы — это общее количество узлов элементов в документе. Глубина — самая длинная цепочка вложенных элементов, при этом корень считается уровнем один.
Почему мои пустые теги изменили форму?
<a></a> и <a/> определены спецификацией XML как идентичные, поэтому минифицированный вывод использует более короткую самозакрывающуюся форму, чтобы сэкономить байты.