XML gilt vielen als Technik der Nullerjahre, steckt aber in jeder Word-Datei, jeder Sitemap und seit 2025 in jeder deutschen E-Rechnung. Wer eine XRechnung prüfen, einen Feed reparieren oder eine Schnittstelle anbinden muss, kommt mit ein paar Grundregeln weit. Dieser Beitrag erklärt sie an einem durchgehenden Beispiel und sagt, wann JSON die bessere Wahl ist.
Von 1998 bis heute: XML 1.0 in der fünften Ausgabe
Das W3C verabschiedete die Extensible Markup Language (XML) 1.0 am 10. Februar 1998 als Recommendation. XML ist eine vereinfachte Teilmenge von SGML, der Metasprache, auf der auch HTML bis Version 4.01 aufbaute. Die bis heute gültige Fassung ist die fünfte Ausgabe vom 26. November 2008. Sie ist ausdrücklich keine neue XML-Version, sondern sammelt Korrekturen. Zu den Entwurfszielen der Spezifikation gehört übrigens der Satz, Knappheit des Markups sei von minimaler Bedeutung, was die Geschwätzigkeit vieler XML-Formate erklärt.
Wichtig für die Praxis: Jeder XML-Parser muss UTF-8 und UTF-16 verstehen. Wer eine andere Kodierung nutzt, muss sie in der XML-Deklaration angeben. Warum UTF-8 fast immer die richtige Wahl ist, erklärt der Beitrag zur Zeichenkodierung UTF-8.
Ein Beispieldokument Zeile für Zeile
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='bestellung.xsl'?>
<!DOCTYPE bestellung [
<!ELEMENT bestellung (kunde, position+)>
<!ATTLIST bestellung nr CDATA #REQUIRED>
<!ELEMENT kunde (#PCDATA)>
<!ELEMENT position (artikel, menge)>
<!ELEMENT artikel (#PCDATA)>
<!ELEMENT menge (#PCDATA)>
]>
<bestellung nr='2026-0815'>
<kunde>Müller & Söhne GmbH</kunde>
<position>
<artikel>Druckerpapier A4</artikel>
<menge>5</menge>
</position>
<position>
<artikel>Toner schwarz</artikel>
<menge>2</menge>
</position>
</bestellung>
- XML-Deklaration in der ersten Zeile: Version und Kodierung.
- Verarbeitungsanweisung
xml-stylesheet: verknüpft ein Stylesheet, hier XSLT. - DOCTYPE mit interner DTD: legt fest, welche Elemente in welcher Reihenfolge vorkommen dürfen.
- Elemente wie
positiontragen Inhalt, Attribute wienrbeschreiben ein Element näher. - Das
&in „Müller & Söhne“ muss als&geschrieben werden.
Wohlgeformt und gültig sind zwei Stufen
Wohlgeformt ist ein Dokument, das die Grammatik von XML einhält: genau ein Wurzelelement, jedes Element geschlossen, korrekt verschachtelt, Attributwerte in Anführungszeichen, < und & im Text maskiert, Groß- und Kleinschreibung beachtet. Verstöße sind laut Spezifikation fatale Fehler, nach denen ein Parser die normale Verarbeitung abbrechen muss. Anders als ein Browser bei HTML repariert XML nichts stillschweigend.
Gültig (valid) ist ein wohlgeformtes Dokument, das zusätzlich eine Dokumenttyp-Deklaration hat und deren Regeln erfüllt. Das Beispiel oben ist beides. Fehlt kunde, bleibt es wohlgeformt, ist aber ungültig. Prüfen lässt sich das mit xmllint aus der Bibliothek libxml2:
xmllint --noout bestellung.xml # nur Wohlgeformtheit
xmllint --valid --noout bestellung.xml # zusätzlich gegen die DTD
DTDs sind die älteste Art, Regeln festzulegen. Sie kennen keine Datentypen: Dass menge eine Zahl sein soll, lässt sich damit nicht ausdrücken. Für Datenaustausch hat sich deshalb XML Schema durchgesetzt, das im Beitrag zu XML Schema (XSD) ausführlich behandelt wird.
Namespaces: wenn zwei Vokabulare aufeinandertreffen
Sobald ein Dokument Elemente aus verschiedenen Formaten mischt, drohen Namenskollisionen. Namespaces lösen das über eine URI, die mit xmlns deklariert wird. Die Regeln stehen in „Namespaces in XML 1.0“, aktuell in der dritten Ausgabe von 2009.
<katalog xmlns='https://example.com/ns/katalog'
xmlns:preis='https://example.com/ns/preise'>
<produkt id='p1'>
<name>Toner schwarz</name>
<preis:netto waehrung='EUR'>39.90</preis:netto>
</produkt>
</katalog>
xmlns='…' setzt den Standard-Namespace für alle Elemente ohne Präfix, xmlns:preis='…' bindet ein Präfix. Die URI muss nicht abrufbar sein, sie dient nur als eindeutiger Name. Eine häufige Stolperfalle: Der Standard-Namespace gilt laut Spezifikation nicht für Attribute ohne Präfix. Und wer in XPath nach /katalog/produkt sucht, findet nichts, solange der Namespace nicht im Werkzeug registriert ist. Genau daran scheitern viele erste Versuche, eine XRechnung maschinell auszulesen.
XSLT und XPath: Daten umformen und abfragen
XPath ist die Abfragesprache für XML-Bäume. Ein paar Ausdrücke für das Beispieldokument:
| XPath-Ausdruck | Ergebnis |
|---|---|
/bestellung/@nr | 2026-0815 |
//position[menge > 3]/artikel | Druckerpapier A4 |
count(//position) | 2 |
XSLT nutzt XPath, um ein XML-Dokument in ein anderes Format zu übersetzen, etwa HTML. Das zum Beispiel passende Stylesheet:
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<ul>
<xsl:for-each select='bestellung/position'>
<li><xsl:value-of select='menge'/> x <xsl:value-of select='artikel'/></li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
Die aktuelle Version XSLT 3.0 ist seit dem 8. Juni 2017 W3C-Recommendation, Werkzeuge wie Saxon setzen sie um. Eine Warnung für alle, die XSLT direkt im Browser nutzen, etwa für hübsch formatierte Sitemaps oder Feeds per xml-stylesheet: Google entfernt XSLT aus Chrome. Laut Chrome-Entwicklerdokumentation funktioniert es ab Chrome 158 (geplant für den 17. November 2026) in der stabilen Version nicht mehr, Firefox und WebKit haben ähnliche Pläne signalisiert. Wer heute auf clientseitiges XSLT setzt, sollte die Transformation auf den Server oder in ein Build-Skript verlegen.
Wo XML heute steckt
| Einsatz | Format | Hinweis |
|---|---|---|
| E-Rechnung | XRechnung, ZUGFeRD | seit 2025 Empfangspflicht für Unternehmen in Deutschland |
| Sitemaps | sitemaps.org-Protokoll | UTF-8 Pflicht, bis 50.000 URLs und 50 MB pro Datei |
| Feeds | RSS 2.0, Atom (RFC 4287) | Podcasts und Blogs |
| Vektorgrafik | SVG | direkt in HTML einbettbar |
| Office-Dateien | Office Open XML (ECMA-376, ISO/IEC 29500), ODF | .docx und .odt sind ZIP-Archive mit XML-Dateien |
In Sitemaps zeigt sich die XML-Strenge im Alltag: Ein & in einer URL muss laut Protokoll als & erscheinen, sonst ist die Datei nicht wohlgeformt. Wie Feeds aufgebaut sind, steht im Beitrag RSS-Feeds erklärt.
E-Rechnung: XRechnung und ZUGFeRD
Seit dem 1. Januar 2025 müssen alle Unternehmen in Deutschland E-Rechnungen empfangen können, ein normales E-Mail-Postfach genügt dafür. Ausstellen müssen sie inländische Unternehmen nach Übergangsfristen spätestens ab 2028, Ausnahmen gelten etwa für Kleinbetragsrechnungen und Rechnungen an Privatkunden. Eine E-Rechnung ist ein strukturierter Datensatz nach der europäischen Norm EN 16931, ein reines PDF zählt nicht.
Die XRechnung ist reines XML in einer von zwei Syntaxen, UBL 2.1 oder UN/CEFACT CII. Betreut wird der Standard von der Koordinierungsstelle für IT-Standards (KoSIT). Gültig ist Stand Oktober 2026 die Version 3.0, laut KoSIT mindestens bis 31. Juli 2027. Eine vorläufige Spezifikation für Version 4.0 erschien im September 2026, die endgültige Fassung ist für Frühjahr 2027 angekündigt. ZUGFeRD ist ein hybrides Format: ein PDF/A-3 für das menschliche Auge, in das eine inhaltsgleiche XML-Datei auf Basis von CII eingebettet ist. Dieser Überblick ist keine Steuerberatung, verbindlich sind die Schreiben des Bundesfinanzministeriums.
XML oder JSON: eine klare Empfehlung
Für neue Web-APIs, Konfigurationsdateien und alles, was im Browser per JavaScript verarbeitet wird, ist JSON die bessere Wahl: kürzer, direkt als Objekt nutzbar, von jeder Sprache gelesen. XML lohnt sich dort, wo seine Stärken zählen:
- Dokumente mit gemischtem Inhalt, also Text mit eingebetteter Auszeichnung wie in Büchern, Verträgen oder technischer Dokumentation.
- Formate, die ein Standard vorschreibt: E-Rechnung, Office-Dateien, SVG, Sitemaps, Behördenschnittstellen.
- Strenge Validierung mit ausgereiften Schemas und Namespaces, wenn viele Partner dieselben Daten austauschen.
Wer also eine eigene Schnittstelle baut, nimmt JSON. Wer ein bestehendes XML-Format bedienen muss, sollte es nicht in JSON nachbauen, sondern mit einem echten Parser und Schema-Validierung arbeiten, statt XML mit regulären Ausdrücken oder String-Verkettung zu erzeugen.
Quellen
- W3C: Extensible Markup Language (XML) 1.0 (Fifth Edition)
- W3C: XML 1.0, Recommendation vom 10. Februar 1998
- W3C: Namespaces in XML 1.0 (Third Edition)
- W3C: Associating Style Sheets with XML documents 1.0
- Chrome for Developers: Deprecating XSLT (Zeitplan)
- sitemaps.org: Sitemaps XML format
- KoSIT / XEinkauf: XRechnung
- Finanzverwaltung Baden-Württemberg: Information zur E-Rechnung







