XML Minifier

Мініфікує XML, видаляючи пробіли та коментарі

Спробувати приклад

Введення XML

Мініфіковане XML

Працює локально · Безпечно вставляти секрети
Мініфіковане XML з'явиться тут…

Що таке мінімізація XML?

Мінімізація XML — це процес видалення всіх зайвих символів з XML-документа без зміни його змісту. XML-мінімізатор прибирає пробіли між тегами, видаляє коментарі, усуває переноси рядків та згортає відступи, щоб отримати компактний однорядковий результат. Підсумковий рядок XML парсери читають ідентично до оригінальної відформатованої версії, відтворюючи ту саму модель даних.

Специфікація XML 1.0 (Рекомендація W3C, п'яте видання) визначає правила обробки пробілів у розділі 2.10. Пробіли між тегами, що не несуть семантичного значення, називають «незначущими пробілами». 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-мінімізатор?

XML з відступами та коментарями ідеально підходить для розробки та перегляду коду. Для зберігання, передачі та машинного опрацювання таке форматування додає байти без жодної користі. XML-мінімізатор усуває цю різницю.

Миттєве зменшення розміру при передачі
Видалення пробілів та коментарів із типового XML-конфігу зменшує його розмір на 20–40%. Для SOAP-пейлоадів та великих стрічок економія часто перевищує 30%, скорочуючи витрати на трафік і час відповіді API.
🔒
Виконується на стороні клієнта, без завантаження
Мінімізатор працює у браузері за допомогою нативного DOMParser. Жодні дані не надсилаються на сервер. Обробка відбувається локально незалежно від вмісту XML.
📦
Без реєстрації та встановлення
Вставте XML, отримайте мінімізований результат. Жодного створення облікових записів, жодних CLI-інструментів для встановлення, жодних залежностей. Працює на будь-якому пристрої з сучасним браузером.
🔧
Обробляє будь-який коректно сформований XML
Підтримує простори імен, секції CDATA, інструкції обробки та глибоко вкладені структури. Якщо вхідний документ є коректно сформованим XML, мінімізатор видасть коректний мінімізований результат.

Сценарії використання XML-мінімізатора

Frontend-розробка
Мінімізуйте SVG-файли, вбудовані в HTML або CSS. Видалення пробілів та коментарів із SVG-розмітки зменшує вагу сторінки без зміни відображуваної графіки. Навіть невеликий набір SVG-іконок може позбутися кількох кілобайтів.
Оптимізація backend API
Стискайте SOAP-відповіді та XML-RPC-пейлоади перед відправкою клієнтам. Мінімізований XML парситься швидше й зменшує мережеву затримку для сервісів із високим навантаженням. Виграш найбільший, коли відповіді ще не стиснуто на транспортному рівні.
DevOps та CI/CD-пайплайни
Мінімізуйте XML-конфігурації (pom.xml, web.xml, .csproj) у пайплайнах збірки, щоб зменшити розмір артефактів у Docker-образах і пакетах розгортання. Менші образи означають швидше завантаження та нижчі витрати на зберігання у реєстрі контейнерів.
QA та тестування
Нормалізуйте XML-тестові фікстури, мінімізуючи їх перед порівнянням. Видалення відмінностей у форматуванні запобігає хибним збоям тестів, спричиненим змінами лише в пробілах. Канонічні мінімізовані фікстури також спрощують перегляд diff-ів у системі контролю версій.
Інженерія даних
Стискайте великі 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?
Так. Мінімізація видаляє лише незначущі пробіли та коментарі. Отриманий документ відповідає тій самій специфікації XML 1.0 або 1.1, що й оригінал. Будь-який сумісний парсер відтворить однакову модель даних як із відформатованої, так і з мінімізованої версії.
Наскільки менший XML після мінімізації?
Економія залежить від того, як відформатовано оригінал. XML із великими відступами та коментарями зазвичай зменшується на 20–40%. Вже компактний документ може втратити лише 5–10%. Порівняйте кількість байтів вхідних та вихідних даних, щоб виміряти точне зменшення.
Чи може мінімізація зламати мій XML?
Якщо мінімізатор видаляє лише пробіли між тегами (незначущі пробіли) та коментарі, семантика документа залишається незмінною. Єдиний граничний випадок — секції xml:space="preserve", де пробіли всередині текстових вузлів є значущими. Коректний мінімізатор дотримується цієї директиви та залишає такі секції незайманими.
У чому різниця між мінімізацією XML та стисненням XML?
Мінімізація редагує сам текст XML, видаляючи символи, що не несуть даних. Стиснення (gzip, Brotli) кодує весь потік байтів у менший бінарний формат, який потрібно розпакувати перед парсингом. Мінімізація та стиснення доповнюють одне одного: спочатку мінімізуйте, потім стискайте для передачі.
Чи варто мінімізувати XML перед збереженням у базі даних?
Для великих обсягів XML-даних мінімізація перед збереженням зменшує використання диска та прискорює читання. Для конфігураційних файлів або шаблонів, які розробники редагують вручну, зберігайте відформатовану версію і мінімізуйте під час збірки або при передачі. Компроміс — читабельність проти ефективності зберігання. Уникайте мінімізації XML, що підлягатиме аудиту, порівнянню у системі контролю версій або ручному редагуванню командами Operations — збереження форматування в таких випадках заощаджує набагато більше часу, ніж варта економія на зберіганні.
Чи підтримує xmllint мінімізацію?
Так. Команда xmllint --noblanks input.xml видаляє незначущі пробіли. Вона не видаляє коментарі за замовчуванням. Щоб також видалити коментарі, передайте результат через xmlstarlet ed -d '//comment()' або використайте власний XSLT, що усуває вузли-коментарі.
Як мінімізація впливає на продуктивність парсингу XML?
Мінімізований XML парситься швидше, оскільки парсер обробляє менше байтів і не стикається з текстовими вузлами, що складаються лише з пробілів. Різниця найпомітніша на великих документах (понад 1 МБ) та у потокових парсерах, де кожен додатковий вузол збільшує накладні витрати на обхід дерева.