Форматировщик и валидатор XML
Расставьте отступы в XML по 2 или 4 пробела либо табуляцией, сожмите его в одну строку или узнайте, почему он не разбирается. Правильно сформированный XML возвращается с числом элементов, глубиной вложенности и размером; некорректный — с сообщением парсера. Бесплатно, без регистрации, а XML никогда не покидает ваш браузер.
Режим
Как пользоваться форматировщиком XML
- 1. Выберите режим. Форматировать расставляет отступы; Минифицировать удаляет пробелы между элементами.
- 2. Выберите отступ. Для форматирования выберите 2 пробела, 4 пробела или табуляцию.
- 3. Вставьте XML и нажмите кнопку. Результат появится ниже с тремя показателями: элементы, максимальная глубина (корень — уровень 1) и размер результата в символах.
- 4. Исправьте ошибки, если они показаны. Если XML не является правильно сформированным, результат не выводится, а парсер вашего браузера сообщает, что он нашёл. Исправьте XML и снова нажмите кнопку.
Правильно сформированный и валидный XML
Словом «проверка» называют два разных действия. Документ правильно сформирован, если он следует синтаксическим правилам Рекомендации W3C по XML 1.0; он валиден, если к тому же соответствует схеме, например DTD или XSD. Этот инструмент проверяет только правильность сформированности, с помощью XML-парсера, встроенного в ваш браузер. DTD и схемы он не читает, поэтому документ, который правильно сформирован, но не подходит для вашего приложения — например, без обязательного элемента, — пройдёт проверку. Правила, которые он соблюдает:
| Правило | Нарушается, когда |
|---|---|
| Один корневой элемент | Два элемента верхнего уровня или текст до корня |
| Элементы вложены правильно | <a><b></a></b> |
| У каждого открывающего тега есть закрывающий | <a><b></a>, или <br> вместо <br/> |
| Имена чувствительны к регистру | <Title>…</title> |
| Значения атрибутов в кавычках | <a id=1/> |
| Атрибут не повторяется в одном элементе | <a id="1" id="2"/> |
< и & в тексте экранированы | <a>5 < 6 & 7</a> должно быть 5 < 6 & 7 |
В XML ровно пять предопределённых сущностей — <, >, &, ' и ", поэтому HTML-сущность, например , является ошибкой, если её не объявляет DTD. Для незакрытого тега сообщение — формулировка браузера, которая различается в разных браузерах, — называет несовпадающую пару: в Chrome <a><b></a> даёт ошибку в строке 1, в столбце 11, с текстом "Opening and ending tag mismatch: b line 1 and a".
Что меняет форматировщик
Инструмент разбирает ваш XML в дерево и записывает дерево обратно, поэтому результат — эквивалентный XML в более аккуратной разметке, а не копия вашего текста. Ожидайте следующих различий:
- Объявление и DOCTYPE сохраняются. Строка
<?xml …?>и объявление<!DOCTYPE …>, включая внутреннее подмножество, записываются так, как вы их набрали. - Атрибуты сохраняют порядок, но записываются в двойных кавычках.
- Сущности раскрываются.
'и ссылки на символы, например©, возвращаются как сами символы; только&,<и>в тексте и"в атрибутах экранируются снова. - Пустые элементы закрываются в себе.
<a></a>становится<a/>, если у него нет содержимого, хотя элемент, содержащий только пробел, остаётся<a></a>. - Комментарии, секции CDATA и инструкции по обработке сохраняются.
Пример
Этот однострочный документ содержит объявление, атрибут в одинарных кавычках, комментарий и пустой элемент:
Ввод
<?xml version="1.0" encoding="UTF-8"?><library><book id='1'><title>APA Manual</title><year>2020</year><!-- note --></book><book id="2"/></library>
Форматирование, 2 пробела
Девять строк и 172 символа: объявление, затем library без отступа, каждый book — на два пробела правее, а title, year и комментарий — на четыре пробела. Атрибут первой книги теперь записан как id="1".
Минификация
Одна строка из 146 символов.
Статистика
5 элементов и максимальная глубина 3 (library, book, title).
Минификация сохраняет объявление и помещает всё дерево в одну строку, поэтому тот же документ уменьшается со 172 до 146 символов. Карточка размера результата показывает эти количества символов.
Какой инструмент вам нужен?
Эта страница для XML. Для HTML, который допускает незакрытые теги и сохраняет пробелы внутри строки, используйте Форматировщик HTML. Чтобы превратить XML в данные JSON, запланированный Конвертер XML в JSON покажет, как атрибуты и повторяющиеся элементы соотносятся с JSON; сам JSON — в Форматировании JSON.
Часто задаваемые вопросы
- Что делает форматировщик XML?
- Он заново расставляет отступы в XML, чтобы была видна вложенность, обычно с одним элементом на строке. Этот инструмент также проверяет правильность сформированности, потому что должен разобрать документ, прежде чем записать его обратно в новой разметке.
- Как здесь работает проверка XML?
- Встроенный в ваш браузер XML-парсер читает текст. Если XML нарушает синтаксическое правило, показывается ошибка парсера и результат не выводится. Инструмент проверяет только правильность сформированности — он не проверяет по схеме DTD или XSD.
- Сохраняются ли комментарии, секции CDATA и атрибуты?
- Да: комментарии и секции CDATA записываются как были, атрибуты сохраняют порядок, хотя кавычки нормализуются до двойных. Объявление DOCTYPE записывается так, как вы его набрали.
- Что делает минификация?
- Она удаляет пробелы и переносы строк между элементами, давая самую короткую эквивалентную запись, и сохраняет объявление XML, если оно есть. Текст внутри элементов, например
<title>, сохраняет свои пробелы, как и текст рядом с дочерними элементами, например абзац с полужирным словом. - Почему форматирование меняет пробелы в тексте?
- Только при форматировании смешанного содержимого — текста рядом с дочерними элементами, например абзаца с полужирным словом. Форматирование обрезает такой текст и помещает каждый фрагмент на отдельную строку, что меняет пробелы; минификация их сохраняет. XML с данными, где элементы содержат либо текст, либо другие элементы, не затрагивается.
- Почему мой XML с не проходит?
- В XML только пять предопределённых сущностей, и
среди них нет. Замените её числовой ссылкой или объявите сущность в DTD. - Загружается ли мой XML на сервер?
- Нет. Разбор и форматирование выполняются в вашем браузере, и ничего из вставленного никуда не отправляется.