XML Formatter

Форматируйте и красиво выводите XML с подсветкой синтаксиса

Попробовать пример

Входные данные XML

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

Работает локально · Безопасно вставлять секреты
Отформатированный XML появится здесь…

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

Форматирование XML (также называемое XML pretty-printing или XML beautification) — это процесс добавления последовательных отступов и переносов строк в XML-документ, чтобы его иерархическая структура стала наглядной. Необработанный XML, получаемый из API, генераторов конфигураций или сериализаторов, нередко передаётся в одну строку без пробелов между тегами. XML-форматтер разбирает такой документ в дерево, а затем повторно сериализует его с предсказуемыми отступами. Результат визуально понятен и значительно проще для восприятия, при этом логическое содержимое документа не изменяется ни в малейшей степени.

Спецификация XML 1.0 (рекомендация W3C, пятое издание) определяет строгую грамматику: каждый открывающий тег должен иметь соответствующий закрывающий или быть самозакрывающимся, значения атрибутов должны быть заключены в кавычки, а пять символов (<, >, &, ", ') требуют экранирования через сущности. Форматтер должен соблюдать эти правила, добавляя лишь незначимые пробельные символы, которые не изменяют информационное множество (infoset) документа. Понимание этих правил принципиально важно: только так можно гарантировать, что отформатированный XML останется корректным и будет принят любым совместимым XML-процессором.

Отформатированный XML проще читать при ревью кода, проще сравнивать в системах контроля версий и проще отлаживать, когда сервис возвращает неожиданные данные. Сама операция форматирования не влечёт потерь: логическое содержимое документа остаётся идентичным, меняется только представление. Инструменты вроде git diff и платформы ревью запросов на слияние показывают только изменённые строки — последовательно расставленные отступы в XML гарантируют, что дифф отражает реальные изменения, а не шум от переформатирования.

Before · xml
After · xml
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
  </book>
</catalog>

Зачем использовать онлайн-форматтер XML?

Форматировать XML вручную трудоёмко и чревато ошибками, особенно в документах с глубокой вложенностью или смешанными пространствами имён. Браузерный форматтер даёт готовый результат менее чем за секунду, независимо от размера файла. В отличие от настольных программ или утилит командной строки, он не требует установки или настройки — достаточно открыть страницу и сразу приступить к работе.

Мгновенный pretty-print
Вставьте или введите XML — и сразу получите форматированный результат с отступами. Не нужно устанавливать CLI-инструменты или запускать шаги сборки.
🔒
Обработка без передачи данных
Весь разбор и форматирование происходят в браузере с помощью DOMParser API. Ваш XML никогда не покидает компьютер и не отправляется ни на какой сервер.
🎨
Настраиваемые отступы
Выбирайте между отступами в 2 пробела, 4 пробела или символ табуляции — в соответствии со стандартами кодирования вашего проекта, без редактирования файлов конфигурации.
📋
Без аккаунта и установки
Откройте страницу, вставьте XML и скопируйте результат. Никаких форм регистрации, никакого настольного ПО, никаких расширений для браузера.

Сценарии использования XML-форматтера

Frontend-разработка
Анализируйте SVG-разметку или XHTML-фрагменты, возвращаемые CMS. Форматирование необработанного вывода позволяет быстро находить конкретные атрибуты и вложенные группы.
Backend-разработка
Отлаживайте SOAP-ответы, RSS-ленты или XML-RPC-нагрузки от сторонних сервисов. Форматированный вывод позволяет отследить отсутствующие элементы или некорректные пространства имён.
DevOps и CI/CD
Читайте файлы Maven pom.xml, Ant build-скрипты или файлы проектов .csproj, сгенерированные машиной без отступов. Форматируйте их перед коммитом, чтобы диффы оставались чистыми.
QA и тестирование
Сравнивайте ожидаемые и фактические XML-нагрузки в интеграционных тестах. Форматирование обеих сторон в одном стиле отступов устраняет ложные несоответствия, вызванные разницей в пробелах.
Инженерия данных
Анализируйте XML-экспорты из баз данных, ETL-конвейеров или государственных порталов открытых данных. Форматированный XML раскрывает структуру записей до того, как вы напишете XSLT-трансформацию или XPath-запрос.
Изучение XML
Студенты, работающие с учебными материалами W3C по XML, могут вставлять учебные файлы в форматтер, чтобы убедиться в корректности вложенности и синтаксиса атрибутов.

Справочник по предопределённым сущностям XML

XML резервирует пять символов для своего синтаксиса. Когда эти символы встречаются в текстовом содержимом или значениях атрибутов, они должны быть заменены предопределёнными ссылками на сущности. Корректный форматтер сохраняет эти сущности при форматировании.

СимволРоль в XMLСущность
<Start of tag&lt;
>End of tag&gt;
&Start of entity&amp;
"Attribute delimiter&quot;
'Attribute delimiter&apos;

Сравнение стилей отступов в XML

Единого стандарта для отступов XML не существует. Выбор зависит от соглашений вашей команды и инструментов в конвейере. Ниже приведены три наиболее распространённых стиля.

2 пробела (рекомендуется)
Наиболее распространённый вариант для веб-ориентированного XML: SVG, XHTML, SOAP, конфигурации Spring. Сохраняет компактность при глубокой вложенности. Используется по умолчанию в большинстве онлайн-форматтеров и IDE.
4 пробела
Предпочтителен в экосистеме Java (Maven, Ant, манифесты Android), где файлы редко превышают 3–4 уровня вложенности. Соответствует стандартному отступу в коде на Java и C#.
Символ табуляции
Позволяет каждому разработчику задать собственную визуальную ширину в редакторе. Распространён в унаследованных проектах и некоторых инструментах Microsoft (.csproj, .nuspec). Даёт меньший размер файла по сравнению с пробелами.

Примеры кода: форматирование XML программно

Если нужно форматировать XML внутри скрипта или процесса сборки, в каждом популярном языке есть встроенная или стандартная библиотека для этого. В Python подойдёт модуль xml.dom.minidom или lxml, в Java — javax.xml.transform с поддержкой отступов, в Node.js — библиотеки xmldom или prettier. Ниже приведены рабочие примеры, которые можно скопировать напрямую.

JavaScript (DOM API)
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)

// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="node()|@*">
      <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
    </xsl:template>
  </xsl:stylesheet>`, 'application/xml')

const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n  <item>hello</item>\n</root>
Python
import xml.dom.minidom

raw = '<root><item>hello</item><item>world</item></root>'
dom = xml.dom.minidom.parseString(raw)
print(dom.toprettyxml(indent='  '))
# → <?xml version="1.0" ?>
# → <root>
# →   <item>hello</item>
# →   <item>world</item>
# → </root>

# With lxml (handles namespaces, XSD, large files)
from lxml import etree
tree = etree.fromstring(raw.encode())
print(etree.tostring(tree, pretty_print=True).decode())
Go
package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

func formatXML(raw string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(raw))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    encoder.Indent("", "  ")
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n  <b>1</b>\n</a>"
CLI (xmllint)
# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux)
xmllint --format input.xml > formatted.xml

# Format from stdin
echo '<a><b>1</b></a>' | xmllint --format -
# → <?xml version="1.0"?>
# → <a>
# →   <b>1</b>
# → </a>

# Validate and format at the same time
xmllint --format --schema schema.xsd input.xml

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

Изменяет ли форматирование XML смысл документа?
Нет. Форматирование XML только добавляет или удаляет незначимые пробелы между тегами. Информационное множество XML (infoset) остаётся идентичным. Исключение: если ваша схема использует xml:space="preserve" для определённых элементов, форматтер должен оставить их нетронутыми — этот инструмент это учитывает.
В чём разница между форматированием и валидацией XML?
Форматирование добавляет отступы и переносы строк для удобства чтения XML. Валидация проверяет, соответствует ли документ схеме (XSD, DTD или RelaxNG). Документ может быть синтаксически корректным, но не соответствовать схеме. Используйте этот форматтер для читаемости, а инструмент XML Validator — для проверки соответствия схеме.
Можно ли форматировать XML с пространствами имён?
Да. Браузерный DOMParser нативно поддерживает пространства имён XML. Префиксы пространств имён, объявления пространств имён по умолчанию (xmlns) и квалифицированные имена атрибутов сохраняются при форматировании. Форматтер не добавляет, не удаляет и не переименовывает привязки пространств имён.
XML-файлы какого размера можно форматировать в браузере?
Браузерное форматирование хорошо работает для документов до примерно 10 МБ. При больших объёмах DOM-дерево потребляет значительную память, и интерфейс может перестать отвечать. Для очень больших файлов используйте CLI-инструмент, например xmllint --format, который обрабатывает XML потоково.
Почему в отформатированном XML появляется XML-декларация?
Некоторые форматтеры добавляют <?xml version="1.0"?> при сериализации DOM-дерева. Эта декларация необязательна в XML 1.0, если кодировка — UTF-8. Если она вам не нужна, удалите первую строку из вывода. Декларация не влияет на разбор любым корректным XML-процессором.
Форматирование XML — это то же самое, что минификация XML?
Это противоположные операции. Форматирование добавляет пробельные символы для улучшения читаемости. Минификация удаляет все несущественные пробелы, чтобы уменьшить размер файла. Обе операции не приводят к потере данных относительно XML infoset. Если нужно минифицировать XML, воспользуйтесь инструментом XML Minifier.
В чём разница между форматированием XML и HTML?
XML строг: каждый тег должен быть закрыт, значения атрибутов должны быть в кавычках, и документ должен иметь ровно один корневой элемент. HTML (в частности HTML5) снисходителен: допускаются необязательные закрывающие теги, атрибуты без кавычек и пустые элементы вроде &lt;br&gt;. XML-форматтер отклонит некорректный XML, тогда как HTML-форматтер терпим к синтаксису, недопустимому в XML.