XML Minifier

Минифицируйте XML, удаляя пробелы и комментарии

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

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

Минифицированный XML

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

Что такое минификация XML?

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

Спецификация XML 1.0 (рекомендация W3C, пятое издание) определяет правила обработки пробелов в разделе 2.10. Пробелы между тегами, не несущие семантической нагрузки, называются «незначимыми пробелами» (insignificant whitespace). XML-процессорам разрешено отбрасывать их. Пробелы внутри текстового содержимого, напротив, значимы по умолчанию — если только родительский элемент не объявляет xml:space="default". Корректный XML-минификатор различает эти два случая и удаляет только то, что безопасно удалять.

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

Before · xml
After · xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Product catalog for Q1 2026 -->
<catalog>
  <product id="p101">
    <name>Widget A</name>
    <price currency="USD">29.99</price>
    <!-- Temporarily discounted -->
    <stock>142</stock>
  </product>
  <product id="p102">
    <name>Widget B</name>
    <price currency="EUR">19.50</price>
    <stock>87</stock>
  </product>
</catalog>
<?xml version="1.0" encoding="UTF-8"?><catalog><product id="p101"><name>Widget A</name><price currency="USD">29.99</price><stock>142</stock></product><product id="p102"><name>Widget B</name><price currency="EUR">19.50</price><stock>87</stock></product></catalog>

Зачем использовать XML Minifier?

XML с отступами и комментариями удобен при разработке и ревью кода. Для хранения, передачи и машинной обработки лишнее форматирование добавляет байты без какой-либо пользы. XML-минификатор устраняет этот разрыв.

Мгновенное уменьшение размера
Удаление пробелов и комментариев из типичного конфигурационного XML-файла сокращает его размер на 20–40%. Для SOAP-нагрузок и объёмных лент экономия нередко превышает 30%, что снижает затраты на трафик и время ответа API.
🔒
Обработка без передачи данных
Минификатор работает в браузере с использованием встроенного DOMParser. Данные не отправляются на сервер. Обработка происходит локально, независимо от содержимого XML.
📦
Без регистрации и установки
Вставьте XML — получите минифицированный результат. Никаких учётных записей, никаких CLI-инструментов для установки, никаких зависимостей. Работает на любом устройстве с современным браузером.
🔧
Поддержка любого корректного XML
Поддерживаются пространства имён, секции CDATA, инструкции по обработке и глубоко вложенные структуры. Если входные данные представляют собой корректный XML, минификатор выдаст валидный минифицированный результат.

Сценарии использования XML Minifier

Frontend-разработка
Минифицируйте SVG-файлы, встроенные в HTML или CSS. Удаление пробелов и комментариев из SVG-разметки уменьшает вес страницы, не изменяя отрисованную графику. Даже небольшой набор SVG-иконок может потерять несколько килобайт.
Оптимизация backend API
Сжимайте SOAP-ответы и XML-RPC-нагрузки перед отправкой клиентам. Минифицированный XML разбирается быстрее и снижает сетевые задержки для высоконагруженных сервисов. Выигрыш наиболее заметен, когда ответы ещё не сжимаются на транспортном уровне.
DevOps и CI/CD
Минифицируйте XML-конфигурации (pom.xml, web.xml, .csproj) в конвейерах сборки для уменьшения размера артефактов в Docker-образах и пакетах развёртывания. Меньшие образы — быстрее загрузка и меньше затрат на хранение в реестре контейнеров.
QA и тестирование
Нормализуйте XML-тестовые фикстуры, минифицируя их перед сравнением. Удаление различий в форматировании предотвращает ложные сбои тестов из-за изменений, касающихся только пробельных символов. Канонические минифицированные фикстуры также упрощают просмотр диффов в системе контроля версий.
Инженерия данных
Сжимайте объёмные XML-потоки данных (RSS, Atom, XBRL) перед записью в базы данных или очереди сообщений. Меньший размер нагрузок снижает затраты на хранение и увеличивает пропускную способность очередей. В масштабе даже 20% уменьшение размера лент ощутимо сказывается на затратах вычислительных ресурсов и операций ввода/вывода.
Изучение структуры XML
Студенты могут минифицировать, а затем повторно форматировать XML, чтобы понять, как парсеры игнорируют незначимые пробелы и почему структура документа не зависит от его визуального представления. Это упражнение делает абстрактные правила спецификации конкретными и сразу наблюдаемыми.

Что удаляет минификация XML

Не всё в XML-документе можно безопасно удалить. В этой справочной таблице приведены виды удаляемого содержимого и указано, всегда ли это безопасно или зависит от конкретного сценария использования.

ЭлементПримерБезопасность
IndentationSpaces/tabs before tagsAlways safe to remove
Line breaks\n and \r\n between tagsAlways safe to remove
Comments<!-- ... -->Safe unless parsed by app
XML declaration<?xml version="1.0"?>Keep if encoding is non-UTF-8
Processing instructions<?xml-stylesheet ...?>Keep if consumed downstream
Trailing whitespaceSpaces after closing tagsAlways safe to remove
Text node whitespaceSpaces inside text contentRemove only between tags, not within

Минификация, Gzip и бинарные форматы

Минификация, сжатие и бинарное кодирование решают проблему размера на разных уровнях. Минификация сохраняет вывод в виде валидного, читаемого XML. Сжатие (gzip, Brotli) сокращает размер дополнительно, но требует шага декомпрессии перед разбором. Бинарные форматы дают наибольшую степень сжатия, однако требуют совместимого кодировщика/декодировщика на обоих концах соединения — что актуально преимущественно для встраиваемых систем или корпоративных сервисов с тяжёлыми WSDL.

Минификация XML
Удаляет незначимые пробелы, комментарии и переносы строк. Вывод остаётся валидным XML, пригодным для разбора любым парсером. Типичное уменьшение размера: 20–40%. Шаг декомпрессии не требуется.
Сжатие Gzip / Brotli
Применяет алгоритм сжатия к байтовому потоку. Типичное уменьшение размера: 60–80% поверх минификации. Требует шага декомпрессии перед разбором XML. Стандартно для HTTP через Content-Encoding.
Бинарные форматы (EXI, Fast Infoset)
Кодируют XML Infoset в бинарном представлении. Типичное уменьшение размера: 80–95%. Требуют совместимого кодировщика/декодировщика на обеих сторонах. Используются в ограниченных средах: встраиваемые системы и корпоративные сервисы с тяжёлыми WSDL.

Примеры кода

Программная минификация XML следует одному и тому же паттерну в любом языке: разберите документ в дерево, при необходимости удалите узлы комментариев, затем сериализуйте без отступов.

JavaScript (browser)
// Minify XML by parsing and re-serializing (strips formatting)
const raw = `<root>
  <item id="1">
    <!-- note -->
    <name>Test</name>
  </item>
</root>`

const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')

// Remove comment nodes
const walker = doc.createTreeWalker(doc, NodeFilter.SHOW_COMMENT)
const comments = []
while (walker.nextNode()) comments.push(walker.currentNode)
comments.forEach(c => c.parentNode.removeChild(c))

const minified = new XMLSerializer().serializeToString(doc)
// → "<root><item id=\"1\"><name>Test</name></item></root>"
Python
from lxml import etree

xml = """<root>
  <item id="1">
    <!-- note -->
    <name>Test</name>
  </item>
</root>"""

tree = etree.fromstring(xml.encode())

# Remove comments
for comment in tree.iter(etree.Comment):
    comment.getparent().remove(comment)

# Serialize without pretty-print (minified)
result = etree.tostring(tree, xml_declaration=False).decode()
# → '<root><item id="1"><name>Test</name></item></root>'

# With xml.etree (stdlib, no lxml needed)
import xml.etree.ElementTree as ET
root = ET.fromstring(xml)
ET.indent(root, space='')  # Python 3.9+
print(ET.tostring(root, encoding='unicode'))
Go
package main

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

func minifyXML(input string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(input))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    // No indentation = minified output
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        // Skip comments
        if _, ok := tok.(xml.Comment); ok {
            continue
        }
        // Skip whitespace-only char data
        if cd, ok := tok.(xml.CharData); ok {
            if strings.TrimSpace(string(cd)) == "" {
                continue
            }
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// minifyXML("<a>\n  <b>1</b>\n</a>") → "<a><b>1</b></a>"
CLI (xmllint)
# Minify XML with xmllint (part of libxml2)
xmllint --noblanks input.xml > minified.xml

# Minify from stdin
echo '<root>
  <item>hello</item>
</root>' | xmllint --noblanks -
# → <?xml version="1.0"?><root><item>hello</item></root>

# Strip comments too (combine with sed or xmlstarlet)
xmlstarlet ed -d '//comment()' input.xml | xmllint --noblanks -

# Check size reduction
echo "Before: $(wc -c < input.xml) bytes"
echo "After:  $(xmllint --noblanks input.xml | wc -c) bytes"

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

Остаётся ли минифицированный XML валидным?
Да. Минификация удаляет только незначимые пробелы и комментарии. Полученный документ соответствует той же спецификации XML 1.0 или 1.1, что и исходный. Любой совместимый парсер извлечёт одинаковую модель данных как из форматированной, так и из минифицированной версии.
Насколько меньше становится XML после минификации?
Экономия зависит от исходного форматирования. Сильно структурированный XML с комментариями обычно уменьшается на 20–40%. Документ, уже являющийся компактным, может потерять лишь 5–10%. Для точного измерения сравните размер в байтах до и после.
Может ли минификация сломать XML?
Если минификатор удаляет только пробелы между тегами (незначимые пробелы) и комментарии, семантика документа не изменяется. Единственный пограничный случай — секции с xml:space="preserve", где пробелы внутри текстовых узлов несут смысловую нагрузку. Корректный минификатор соблюдает эту директиву и оставляет такие секции нетронутыми.
В чём разница между минификацией и сжатием XML?
Минификация редактирует сам текст XML, удаляя символы, не несущие данных. Сжатие (gzip, Brotli) кодирует весь байтовый поток в меньший бинарный формат, который нужно распаковать перед разбором. Минификация и сжатие дополняют друг друга: сначала минифицируйте, затем сжимайте для передачи.
Стоит ли минифицировать XML перед сохранением в базу данных?
Для больших объёмов XML-данных минификация перед сохранением сокращает использование диска и ускоряет чтение. Для конфигурационных файлов или шаблонов, которые разработчики редактируют вручную, лучше хранить форматированную версию и минифицировать при сборке или передаче. Компромисс — между читаемостью и эффективностью хранения. Не стоит минифицировать XML, который будет аудироваться, сравниваться в системе контроля версий или вручную обновляться командой эксплуатации — в таких случаях сохранение форматирования сэкономит значительно больше времени, чем даёт выигрыш в объёме хранилища.
Поддерживает ли xmllint минификацию?
Да. Запуск xmllint --noblanks input.xml удаляет незначимые пробелы. Комментарии при этом не удаляются по умолчанию. Чтобы удалить и комментарии, предварительно пропустите файл через xmlstarlet ed -d '//comment()' или используйте XSLT-трансформацию, удаляющую узлы комментариев.
Как минификация влияет на производительность разбора XML?
Минифицированный XML разбирается быстрее, поскольку парсер обрабатывает меньше байт и не встречает текстовые узлы, состоящие только из пробелов. Разница наиболее заметна на больших документах (от 1 МБ) и в потоковых парсерах, где каждый дополнительный узел увеличивает накладные расходы на обход дерева.