XML Formatter
XML formatieren und verschönern mit Syntaxhervorhebung
XML-Eingabe
Formatiertes XML
Was ist XML-Formatierung?
XML-Formatierung (auch XML Pretty-Printing oder XML-Verschönerung genannt) ist der Prozess, einem XML-Dokument konsistente Einrückungen und Zeilenumbrüche hinzuzufügen, sodass seine hierarchische Struktur sichtbar wird. Rohes XML aus APIs, Konfigurationsgeneratoren oder Serialisierern wird häufig als einzelne Zeile ohne Leerzeichen zwischen den Tags geliefert. Ein XML-Formatter parst das Dokument in einen Baum und serialisiert es anschließend mit vorhersehbaren Abständen neu. Das Ergebnis ist visuell übersichtlich und deutlich leichter zu verstehen, ohne dass der logische Inhalt des Dokuments in irgendeiner Weise verändert wird.
Die XML-1.0-Spezifikation (W3C-Empfehlung, fünfte Ausgabe) definiert eine strenge Grammatik: Jedes öffnende Tag muss ein passendes schließendes Tag haben oder selbstschließend sein, Attribute müssen in Anführungszeichen stehen, und fünf Zeichen (<, >, &, ", ') erfordern Entity-Escaping. Ein Formatter muss diese Regeln einhalten und dabei ausschließlich bedeutungslosen Leerraum einfügen, der den Informationsgehalt des Dokuments (Infoset) nicht verändert.
Formatiertes XML ist einfacher bei Code-Reviews zu lesen, einfacher in der Versionskontrolle zu vergleichen und einfacher zu debuggen, wenn ein Dienst unerwartete Daten zurückgibt. Die Formatierung selbst ist verlustfrei: Der logische Inhalt des Dokuments bleibt identisch, nur die Darstellung ändert sich. Tools wie git diff und Pull-Request-Plattformen zeigen nur geänderte Zeilen — konsistent eingerücktes XML stellt sicher, dass diese Diffs echte Änderungen widerspiegeln und kein Formatierungsrauschen.
<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>Warum einen Online-XML-Formatter verwenden?
XML von Hand zu formatieren ist fehleranfällig und langsam, besonders bei Dokumenten mit tiefer Schachtelung oder gemischten Namensräumen. Ein browserbasierer Formatter liefert ein formatiertes Ergebnis in unter einer Sekunde, unabhängig von der Dateigröße. Im Gegensatz zu Desktop-Tools oder CLI-Programmen ist keine Installation erforderlich — der Formatter läuft vollständig im Browser und verarbeitet alle Daten lokal auf Ihrem Gerät.
Anwendungsfälle für den XML Formatter
XML Predefined Entity Reference
XML reserviert fünf Zeichen für seine Syntax. Wenn diese Zeichen als wörtlicher Textinhalt oder in Attributwerten vorkommen, müssen sie durch vordefinierte Entity-Referenzen ersetzt werden. Ein korrekter Formatter bewahrt diese Entities beim Pretty-Printing.
| Zeichen | Rolle in XML | Entity |
|---|---|---|
| < | Start of tag | < |
| > | End of tag | > |
| & | Start of entity | & |
| " | Attribute delimiter | " |
| ' | Attribute delimiter | ' |
XML-Einrückungsstile im Vergleich
Es gibt keinen einheitlichen Standard für XML-Einrückung. Die Wahl hängt von den Konventionen des Teams und den Tools in der Pipeline ab. Hier sind die drei häufigsten Stile.
Code-Beispiele: XML programmatisch formatieren
Wenn Sie XML in einem Skript oder Build-Prozess formatieren müssen, bietet jede wichtige Programmiersprache eine integrierte oder Standard-Bibliothek. In Python eignet sich das Modul xml.dom.minidom, in Java bietet javax.xml.transform Unterstützung für hübsche Ausgabe, und in Node.js stehen Bibliotheken wie xmldom oder prettier zur Verfügung. Nachfolgend finden Sie funktionierende Beispiele, die Sie direkt kopieren können.
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