XML Minifier

Minifiera XML genom att ta bort blanksteg och kommentarer

Prova ett exempel

XML-indata

Minifierad XML

Körs lokalt · Säkert att klistra in hemligheter
Minifierad XML visas här…

Vad är XML-minifiering?

XML-minifiering är processen att ta bort alla onödiga tecken från ett XML-dokument utan att förändra dess innebörd. En XML-minifierare tar bort blanksteg mellan taggar, tar bort kommentarer, eliminerar radbrytningar och komprimerar indragning för att producera kompakt utdata på en enda rad. Resultatet är en XML-sträng som parsers läser identiskt med den ursprungliga formaterade versionen och som ger samma datamodell.

XML 1.0-specifikationen (W3C Recommendation, femte upplagan) definierar regler för blankstegshantering i avsnitt 2.10. Blanksteg mellan taggar som inte har något semantiskt värde kallas "insignifikant blanksteg". XML-processorer tillåts att kasta bort det. Blanksteg inuti textinnehåll är däremot som standard betydelsefullt, såvida inte förälderelementet deklarerar xml:space="default". En korrekt XML-minifierare skiljer mellan dessa två fall och tar bara bort det som är säkert att ta bort.

Minifiering skiljer sig från komprimering. Gzip eller Brotli minskar storleken på transportlagret och kräver dekomprimering innan parsning. Minifiering minskar storleken på själva rådokumentet, så XML:en förblir giltig och läsbar av alla parsers utan ett dekomprimeringsteg. I praktiken ger minifiering innan komprimering bäst resultat: du eliminerar redundanta tecken först, varefter komprimeringsalgoritmen arbetar på ett tätare indata.

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>

Varför använda en XML-minifierare?

Formaterad XML med indragning och kommentarer är idealisk för utveckling och kodgranskning. För lagring, överföring och maskinbearbetning tillför den extra formateringen bytes utan någon nytta. En XML-minifierare täpper igen det gapet.

Minska överföringsstorleken direkt
Att ta bort blanksteg och kommentarer från en typisk XML-konfigurationsfil minskar storleken med 20–40 %. För SOAP-nyttolaster och stora flöden överstiger besparingarna ofta 30 %, vilket minskar bandbreddskostnader och API-svarstider.
🔒
Körs på klientsidan, inga uppladdningar
Minifieraren körs i webbläsaren med den inbyggda DOMParser. Ingen data skickas till en server. Bearbetningen sker lokalt oavsett vad XML:en innehåller.
📦
Ingen registrering eller installation
Klistra in din XML och få den minifierade utdatan. Inget konto behövs, inget CLI-verktyg att installera, inga beroenden. Fungerar på alla enheter med en modern webbläsare.
🔧
Hanterar alla välformade XML-dokument
Stöder namnrymder, CDATA-sektioner, bearbetningsinstruktioner och djupt nästlade strukturer. Om indata är välformad XML producerar minifieraren giltig minifierad utdata.

Användningsfall för XML Minifier

Frontendutveckling
Minifiera SVG-filer inbäddade i HTML eller CSS. Att ta bort blanksteg och kommentarer från SVG-uppmärkning minskar sidans vikt utan att påverka den renderade grafiken. Redan en blygsam SVG-ikonuppsättning kan minska med flera kilobyte.
Optimering av backend-API
Förminska SOAP-svar och XML-RPC-nyttolaster innan de skickas till klienter. Minifierad XML parsas snabbare och minskar nätverksfördröjning för tjänster med hög genomströmning. Vinsten är störst när svar inte redan komprimeras på transportlagret.
DevOps och CI/CD-pipelines
Minifiera XML-konfigurationsfiler (pom.xml, web.xml, .csproj) i byggpipelines för att minska artefaktstorleken i Docker-avbildningar och distributionspaket. Mindre avbildningar ger snabbare hämtningstider och lägre lagringskostnader för containerregister.
QA och testning
Normalisera XML-testfixtures genom att minifiera dem före jämförelse. Att ta bort formateringsskillnader förhindrar falska testfel orsakade av ändringar som bara berör blanksteg. Kanoniska minifierade fixtures gör versionskontrollsdiff:ar enklare att granska.
Datateknik
Komprimera stora XML-dataflöden (RSS, Atom, XBRL) innan de lagras i databaser eller meddelandeköer. Mindre nyttolaster innebär lägre lagringskostnader och snabbare kögenomströmning. I stor skala ger en 20 % minskning av flödesstorleken snabbt utslag på beräknings- och I/O-kostnader.
Lära sig XML-struktur
Studenter kan minifiera och sedan formatera om XML för att förstå hur parsers ignorerar insignifikant blanksteg och varför dokumentstrukturen är oberoende av dess visuella formatering. Övningen gör abstrakta specifikationsregler konkreta och direkt observerbara.

Vad XML-minifiering tar bort

Inte allt i ett XML-dokument kan tas bort på ett säkert sätt. Referenstabellen nedan visar varje typ av borttagbart innehåll och om det alltid är säkert att ta bort det, eller om det beror på ditt användningsfall.

PostExempelSäkerhet
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

Minifiering vs Gzip vs binärformat

Minifiering, komprimering och binärkodning riktar sig mot olika lager av storleksproblemet. Minifiering håller utdata som giltig, mänskligt läsbar XML. Komprimering (gzip, Brotli) minskar ytterligare men kräver ett dekomprimeringsteg innan parsning. Binärformat går längst, men båda ändarna av anslutningen behöver en kompatibel kodare/avkodare — vilket är praktiskt huvudsakligen för inbyggda system eller WSDL-tunga företagstjänster.

XML-minifiering
Tar bort insignifikant blanksteg, kommentarer och radbrytningar. Utdata är fortfarande giltig XML, läsbar av alla parsers. Typisk minskning: 20–40 %. Inget dekomprimeringsteg behövs.
Gzip / Brotli-komprimering
Tillämpar en komprimeringsalgoritm på byteströmmen. Typisk minskning: 60–80 % utöver minifiering. Kräver ett dekomprimeringsteg innan XML kan parsas. Standard för HTTP via Content-Encoding.
Binärformat (EXI, Fast Infoset)
Kodar XML Infoset i en binär representation. Typisk minskning: 80–95 %. Kräver en kompatibel kodare/avkodare på båda sidor. Används i begränsade miljöer som inbyggda system och WSDL-tunga tjänster.

Kodexempel

Att minifiera XML programmatiskt följer samma mönster i varje språk: parsa dokumentet till ett träd, ta eventuellt bort kommentarsnoder, och serialisera sedan utan indragning.

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"

Vanliga frågor

Är minifierad XML fortfarande giltig XML?
Ja. Minifiering tar bara bort insignifikant blanksteg och kommentarer. Det resulterande dokumentet överensstämmer med samma XML 1.0- eller 1.1-specifikation som originalet. Alla konforma parsers producerar samma datamodell från både den formaterade och den minifierade versionen.
Hur mycket mindre blir XML efter minifiering?
Besparingarna varierar beroende på hur originalet är formaterat. Kraftigt indragen XML med kommentarer krymper typiskt med 20–40 %. Ett dokument som redan är kompakt kan bara förlora 5–10 %. Jämför antalet byte i indata och utdata för att mäta den exakta minskningen.
Kan minifiering göra min XML trasig?
Om minifieraren bara tar bort blanksteg mellan taggar (insignifikant blanksteg) och kommentarer förblir dokumentets semantik densamma. Undantaget är avsnitt med xml:space="preserve", där blanksteg inuti textnoder är meningsfullt. En korrekt minifierare respekterar detta direktiv och lämnar dessa avsnitt orörda.
Vad är skillnaden mellan XML-minifiering och XML-komprimering?
Minifiering redigerar XML-texten i sig genom att ta bort tecken som inte bär någon data. Komprimering (gzip, Brotli) kodar hela byteströmmen till ett mindre binärt format som måste dekomprimeras innan parsning. Minifiering och komprimering kompletterar varandra: minifiera först, komprimera sedan för transport.
Bör jag minifiera XML innan jag lagrar det i en databas?
För stora volymer XML-data minskar minifiering före lagring diskanvändningen och snabbar upp läsningar. För konfigurationsfiler eller mallar som utvecklare redigerar för hand, lagra den formaterade versionen och minifiera vid byggtid eller under överföring. Avvägningen är läsbarhet kontra lagringseffektivitet. Undvik att minifiera XML som ska granskas, diff:as i versionshantering eller uppdateras manuellt av driftteam — att bevara formateringen i dessa fall sparar mycket mer tid än lagringsbesparingarna är värda.
Stöder xmllint minifiering?
Ja. Att köra xmllint --noblanks input.xml tar bort insignifikant blanksteg. Det tar inte bort kommentarer som standard. För att ta bort kommentarer också, dirigera utdata genom xmlstarlet ed -d '//comment()' först, eller använd en anpassad XSLT som tar bort kommentarsnoder.
Hur påverkar minifiering XML-parsningsprestanda?
Minifierad XML parsas snabbare eftersom parsern bearbetar färre byte och inte stöter på blankstegsbaserade textnoder. Skillnaden märks mest i stora dokument (1 MB+) och i strömningsbaserade parsers, där varje extra nod ökar traverseringskostnaden.