XML Formatter
XML formatteren en verfraaid weergeven met syntaxmarkering
XML-invoer
Geformateerde XML
Wat is XML-opmaak?
XML-opmaak (ook wel XML pretty-printing of XML-verfraaiing genoemd) is het proces van het toevoegen van consistente inspringing en regelafbrekingen aan een XML-document, zodat de hiërarchische structuur zichtbaar wordt. Onbewerkte XML van API's, configuratiegeneratoren of serializers wordt vaak aangeleverd als één enkele regel zonder witruimte tussen de tags. Een XML-formatter parseert dat document tot een boomstructuur en serialiseert het vervolgens opnieuw met voorspelbare opmaak. Het resultaat is visueel helder en veel gemakkelijker te begrijpen, zonder dat de logische inhoud van het document ook maar enigszins wordt gewijzigd.
De XML 1.0-specificatie (W3C Recommendation, vijfde editie) definieert een strenge grammatica waarbij elke openingstag een bijbehorende sluitingstag moet hebben of zelfsluitend moet zijn, attributen moeten worden aangehaald, en vijf tekens (<, >, &, ", ') moeten worden vervangen door entiteitsverwijzingen. Een formatter moet deze regels respecteren terwijl alleen niet-significante witruimte wordt ingevoegd die de informatieinhoud (infoset) van het document niet wijzigt. Een correct begrip van deze regels is essentieel om te garanderen dat geformatteerde XML geldig blijft en door alle conforme XML-parsers kan worden verwerkt.
Geformateerde XML is gemakkelijker te lezen tijdens code-review, gemakkelijker te vergelijken in versiebeheer, en gemakkelijker te debuggen wanneer een service onverwachte gegevens retourneert. De opmaakbewerking zelf is verliesvrij: de logische inhoud van het document blijft identiek, alleen de weergave verandert. Hulpmiddelen zoals git diff en platforms voor het beoordelen van pull-requests tonen alleen gewijzigde regels — consistent ingesprongen XML zorgt ervoor dat die diffs echte wijzigingen weergeven en geen opmaakruis.
<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>Waarom een online XML-formatter gebruiken?
XML handmatig opmaken is foutgevoelig en tijdrovend, vooral bij documenten met diepe nesting of gemengde naamruimten. Een browsergebaseerde formatter levert een opgemaakt resultaat in minder dan een seconde, ongeacht de bestandsgrootte. In tegenstelling tot desktoptools of opdrachtregeltools is geen installatie of configuratie vereist — open de pagina en begin meteen met werken.
Toepassingen van de XML Formatter
XML voorgedefinieerde entiteitsverwijzingen
XML reserveert vijf tekens voor zijn syntaxis. Wanneer deze tekens voorkomen als letterlijke tekstinhoud of attribuutwaarden, moeten ze worden vervangen door voorgedefinieerde entiteitsverwijzingen. Een correcte formatter bewaart deze entiteiten tijdens pretty-printing.
| Teken | Rol in XML | Entiteit |
|---|---|---|
| < | Start of tag | < |
| > | End of tag | > |
| & | Start of entity | & |
| " | Attribute delimiter | " |
| ' | Attribute delimiter | ' |
XML-inspringingstijlen vergeleken
Er is geen enkele standaard voor XML-inspringing. De keuze hangt af van de conventies van uw team en de hulpmiddelen in uw pipeline. Hieronder staan de drie meest gebruikte stijlen.
Codevoorbeelden: XML programmatisch formatteren
Wanneer u XML moet formatteren binnen een script of bouwproces, heeft elke grote taal een ingebouwde of standaardbibliotheekmogelijkheid. In Python kunt u het module xml.dom.minidom of lxml gebruiken, in Java biedt javax.xml.transform ondersteuning voor mooie uitvoer, en in Node.js zijn er bibliotheken zoals xmldom of prettier. Hieronder staan werkende voorbeelden die u direct kunt kopiëren.
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>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())
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>"# 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