Форматувати та робити відступи у XML
- Панель керування
- Документація
- API
Навіщо форматувати XML?
Форматування XML (також зване XML pretty print, XML відступ або XML форматування) полягає у реорганізації компактного або мінімізованого XML-документа у структуру з відступами, читабельну рядок за рядком. Добре відформатований XML покращує читабельність людиною, що є суттєвим при читанні SOAP-відповіді, перегляді RSS-потоку або інспекції файлу конфігурації.
Конкретно, XML форматується з чотирьох основних причин:
- Debug: швидко знайти незакритий тег, відсутній атрибут або непослідовну структуру.
- Ручна інтеграція: чисто скопіювати фрагмент у файл конфігурації без порушення наявного відступу.
- Code review: порівняння двох версій XML-документа у Git diff стає читабельним, коли кожен тег знаходиться на власному рядку.
- Документація та приклади: відформатований XML набагато більш дидактичний у технічній документації або README.
Типові випадки використання
XML залишається скрізь присутнім в екосистемі програмного забезпечення. Ось формати, на яких розробники найчастіше використовують XML-форматер:
- SOAP-відповіді: конверти
<soap:Envelope>, повернуті SOAP веб-сервісами, як правило мінімізовані. - RSS та Atom потоки: для інспекції або аудиту потоку синдикації.
- Конфігурації Spring, Maven (
pom.xml), Ant, Ivy: файли збірки та залежностей Java. AndroidManifest.xmlта інші XML-ресурси Android-проекту.- SVG-файли: векторна графіка, експортована з дизайн-програми, часто стиснута в один рядок.
- Експорти e-commerce: потоки продуктів Google Shopping, експорти Magento, Shopify або PrestaShop.
- Документи OOXML: файли
.docx,.xlsxта.pptxє ZIP-архівами, що містять XML-файли, які часто потрібно інспектувати. - XML-сайтмапи:
sitemap.xml, що обслуговуються пошуковим системам.
Як працює форматування XML
XML-форматер не просто додає пробіли навмання. Він виконує два кроки:
- Parsing: документ читається, потім перетворюється у дерево DOM (Document Object Model). Цей крок також перевіряє, що XML є добре сформованим (теги правильно вкладені, атрибути у лапках, один кореневий елемент).
- Індентований серіалізатор: дерево DOM повторно виводиться у вигляді тексту з переносами рядків між елементами та відступом, пропорційним глибині у дереві.
Цей підхід через дерево гарантує, що логічна структура документа залишається суворо ідентичною: змінюються лише незначущі пробіли між тегами. Секції CDATA, коментарі та інструкції обробки зберігаються.
Як користуватися XML-форматером
Процедура навмисно проста:
- Вставте ваш XML-документ у текстове поле або завантажте файл
.xml. - Підтвердіть форму: документ аналізується та автоматично виділяється відступами.
- Відформатований результат з'являється в зоні виведення. У разі помилки парсингу, повідомлення вказує характер та приблизне місце проблеми.
- Скопіюйте результат за допомогою відповідної кнопки або завантажте для безпосередньої інтеграції у ваш проект.
Найкращі практики відступів XML
Кілька угод для дотримання з метою виробляти чистий та довготривалий XML:
- Відступ: 2 або 4 пробіли відповідно до угоди вашої команди. Залишайтеся послідовними у всьому проекті.
- Переноси рядків: один елемент на рядок, що робить Git diff придатним для використання.
- CDATA-секції: гарний форматер повністю зберігає блоки
<![CDATA[ ... ]]>без переіндентації їхнього вмісту, який обробляється як сирий текст. - Кодування: завжди оголошуйте кодування у першому рядку з
<?xml version="1.0" encoding="UTF-8"?>. UTF-8 є де-факто стандартом. - Атрибути: якщо елемент має багато атрибутів, деякі команди переносять їх на новий рядок для читабельності; інакше вони залишаються на тому самому рядку, що й відкриваючий тег.
- Коментарі:
<!-- ... -->повинні зберігатися форматером такими як є.
Приклад до/після
Ось конкретний приклад компактного XML, прикрашеного форматером.
До (один рядок, нечитабельний):
<root><item id="1">val</item><item id="2">val2</item></root>
Після (відформатований з 2 пробілами):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1">val</item>
<item id="2">val2</item>
</root>
Логічна структура є суворо ідентичною: змінюється лише візуальний порядок.
Повний приклад
Більший XML-документ після форматування виглядає так:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user id="12345">
<name>John Doe</name>
<email>johndoe@example.com</email>
<address>
<street>123 Main St</street>
<city>Springfield</city>
<state>IL</state>
<postalCode>62704</postalCode>
<country>USA</country>
</address>
<phoneNumbers>
<phoneNumber type="home">555-1234</phoneNumber>
<phoneNumber type="work">555-5678</phoneNumber>
</phoneNumbers>
<preferences>
<newsletter>true</newsletter>
<theme>dark</theme>
</preferences>
<lastLogin>2024-06-14T09:30:00Z</lastLogin>
</user>
</root>
Часті запитання
Що таке добре сформований XML?
XML вважається добре сформованим (well-formed), коли він дотримується основних синтаксичних правил: один кореневий елемент, правильно вкладені та закриті теги, атрибути у лапках, спеціальні символи екрановані (&, <, >). Це є передумовою для парсингу документа. Не плутайте з дійсним XML, який додатково відповідає схемі XSD або DTD.
В чому різниця між форматуванням (pretty print) та мінімізацією XML?
Pretty print додає переноси рядків та відступи для читабельності людиною. Мінімізація робить зворотне: вона видаляє всі незначущі пробіли для зменшення розміру документа, що корисно для мережевого транзиту (SOAP-відповіді, XML API). Обидва документи є семантично еквівалентними.
Чи зберігаються коментарі та секції CDATA при форматуванні?
Так. Правильний форматер зберігає коментарі <!-- ... -->, секції <![CDATA[ ... ]]> та інструкції обробки (<? ... ?>). Вміст CDATA залишається незмінним без переіндентації, оскільки він обробляється як сирий текст. Перевіряйте результат, якщо ваші коментарі мають документаційне значення.
Чи обробляються XML-простори імен (xmlns)?
Так. Оголошення простору імен (xmlns:soap="...") та пов'язані префікси (<soap:Envelope>) зберігаються такими як є. Форматер не перейменовує префікси і не переміщує оголошення у дереві, що гарантує незмінність семантики документа. Простори імен за замовчуванням (без префіксу) також підтримуються на рівні оголошення.
Чи виділяти відступи пробілами або табуляціями?
Обидва варіанти працюють, але пробіли є домінантною угодою, оскільки вони відображаються однаково скрізь (термінали, браузери, Git diff). 2 або 4 пробіли залежно від складності вашого XML: 2 для дуже вкладених документів (SVG, конфігурації Spring), 4 для плоских документів. Головне залишається послідовність у всьому проекті.
Чи змінює форматер семантику документа?
Ні. Коригуються лише пробіли між тегами. Структура DOM, значення атрибутів та текстовий вміст елементів залишаються ідентичними. Виняток: значущий текстовий вміст (з xml:space="preserve") повинен зберігатися як є, перевіряйте цей аспект, якщо ваші дані містять смислові пробіли.
Чи можна валідувати XML одночасно з форматуванням?
Форматер вже виконує синтаксичну валідацію (добре сформований XML), оскільки він повинен парсити документ. Для валідації проти схеми XSD або DTD потрібен спеціальний інструмент: структурна валідація виходить за межі простого форматера. xmllint --schema або xerces підходять для цього додаткового кроку.
Приклад запиту
curl -X POST https://cdrn.fr/api/v1/tools/xml-formatter/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Схема вхідних даних
| Поле | Тип | Обов'язкове | За замовчуванням |
|---|---|---|---|
input |
text | ✓ | – |
Точки доступу
GET https://cdrn.fr/api/v1/tools- перелічує всі доступні інструментиGET https://cdrn.fr/api/v1/tools/xml-formatter- отримує схему цього інструментуPOST https://cdrn.fr/api/v1/tools/xml-formatter/execute- виконує цей інструмент з JSON-payload