Zurück zum Blog
Entwickler-Tools 10 Min. LesezeitVeröffentlicht am 17. April 2025· Aktualisiert am 23. April 2025

XML verstehen: Ein Entwickler-Leitfaden zur Sprache hinter E-Rechnungen

XML treibt XRechnung, ZUGFeRD und Hunderte von Unternehmens-Datenstandards an. Dieser Leitfaden erklärt XML-Struktur, Namespaces und Schlüsselkonzepte für Entwickler, die mit deutschen E-Rechnungen arbeiten.

Max Blue

Max Blue

Gründer & Chefredakteur

XML (Extensible Markup Language) ist das Rückgrat des modernen Datenaustauschs. Von XRechnung und ZUGFeRD über SOAP-Webservices, RSS-Feeds bis hin zu Android-App-Manifesten ist XML allgegenwärtig in der Unternehmenssoftwareentwicklung. Das Verständnis von XML ist für jeden Entwickler, der mit der deutschen E-Rechnungsstellung, staatlichen Beschaffungssystemen oder dem Austausch von Finanzdaten arbeitet, unverzichtbar.

Was ist XML?

XML ist eine Auszeichnungssprache, die Daten in einem hierarchischen, textbasierten Format kodiert, das sowohl für Menschen lesbar als auch von Maschinen interpretierbar ist. Anders als HTML – das beschreibt, wie Inhalte angezeigt werden sollen – beschreibt XML, was Daten sind und wie sie strukturiert sind. XML hat keine vordefinierten Tags; jedes von Ihnen verwendete Tag beschreibt die domänenspezifische Bedeutung der darin enthaltenen Daten.

Das W3C (World Wide Web Consortium) standardisierte XML 1.0 im Jahr 1998, und es ist seitdem bemerkenswert stabil geblieben. XML 1.1 lockerte einige Zeichenbeschränkungen für Unicode-Kompatibilität, aber XML 1.0 ist die dominierende Version in Produktionssystemen, einschließlich aller XRechnung-Dateien.

Die Anatomie eines XML-Dokuments

Ein wohlgeformtes XML-Dokument hat folgende Struktur:

  • XML-Deklaration: Eine optionale erste Zeile, die die XML-Version und Zeichenkodierung angibt: <?xml version="1.0" encoding="UTF-8"?>. Fügen Sie diese stets in XRechnung-Dateien ein.
  • Wurzelelement: Jedes XML-Dokument muss genau ein Wurzelelement haben, das alle anderen Elemente enthält. In XRechnung UBL ist dies <Invoice>.
  • Elemente: Datencontainer, die durch ein öffnendes Tag (<ElementName>) und ein schließendes Tag (</ElementName>) definiert werden. Elemente können verschachtelt werden.
  • Attribute: Schlüssel-Wert-Paare innerhalb öffnender Tags, die Metadaten liefern: <amount currencyID="EUR">100.00</amount>.
  • Textinhalt: Der eigentliche Datenwert zwischen öffnenden und schließenden Tags.
  • Kommentare: Für Menschen lesbare Hinweise, die von Parsern ignoriert werden: <!-- Das ist ein Kommentar -->.
  • CDATA-Abschnitte: Abschnitte, in denen Sonderzeichen nicht escaped werden müssen: <![CDATA[<roher Inhalt hier>]]>.

XML-Regeln: Was macht ein XML-Dokument wohlgeformt?

Ein wohlgeformtes XML-Dokument muss folgende Regeln erfüllen:

  1. Alle Elemente müssen ordnungsgemäß geschlossen werden. <br /> oder <br></br>, nicht <br>.
  2. Tags sind Groß- und Kleinschreibung-sensitiv: <Invoice> und <invoice> sind verschiedene Elemente.
  3. Elemente müssen ordnungsgemäß verschachtelt werden – ein Kindelement muss geschlossen werden, bevor sein Elternelement geschlossen wird.
  4. Es muss genau ein Wurzelelement vorhanden sein.
  5. Attributwerte müssen in Anführungszeichen stehen (einfache oder doppelte).
  6. Die Zeichen <, >, &, ' und " müssen in Textinhalten als &lt;, &gt;, &amp;, &apos; und &quot; maskiert werden.

XML-Namespaces: Unverzichtbar für XRechnung

XML-Namespaces verhindern Namenskonflikte beim Kombinieren von XML-Vokabularen aus verschiedenen Quellen. Da XRechnung Elemente aus mehreren Standards (UBL, CCTS, XSD) kombiniert, sind Namespaces unverzichtbar. Ein Namespace wird mit dem xmlns-Attribut deklariert:

In XRechnung UBL sehen Sie Deklarationen wie xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" (der Standard-Namespace für Invoice-Elemente), neben xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" (für aggregierte Komponenten wie PostalAddress) und xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" (für Basiskomponenten wie Amount).

Wenn Sie cbc:Amount oder cac:PostalAddress in einer XRechnung-Datei sehen, verweist das Präfix (cbc, cac) auf eine Namespace-URI. Der vollständige Elementname bei namespace-bewusstem Parsen ist URI + lokaler Name, was ihn unabhängig vom Präfix global eindeutig macht.

XPath: XML-Dokumente abfragen

XPath ist die Abfragesprache für XML und wird umfangreich in XSLT-Transformationen und KOSIT-Validierungsregeln verwendet. Die Schematron-Geschäftsregeln von KOSIT nutzen XPath zur Überprüfung von XRechnung-Inhalten. Das Verständnis grundlegender XPath-Ausdrücke hilft beim Debuggen von Validierungsfehlern:

  • / wählt das Wurzelelement aus.
  • //element wählt alle Elemente mit diesem Namen überall im Dokument aus.
  • @attribut wählt ein Attribut aus.
  • element[bedingung] filtert Elemente nach einer Bedingung.
  • text() wählt den Textinhalt eines Elements aus.

XML-Schema-Validierung (XSD)

Während Wohlgeformtheitsprüfungen die syntaktische Gültigkeit sicherstellen, stellt die XML-Schema-Validierung (XSD) sicher, dass Ihr Dokument einer bestimmten Strukturdefinition entspricht. XRechnung-Schemas definieren, welche Elemente Pflichtfelder sind, ihre Datentypen und zulässige Werte. Ein fehlgeschlagener XSD-Validierung bedeutet, dass ein Feld den falschen Typ hat (z. B. ein Textwert, wo ein Datum erwartet wird) oder ein Pflichtfeld fehlt.

XML-Parsing in gängigen Programmiersprachen

Die meisten modernen Programmiersprachen haben XML-Parsing eingebaut oder als Standardbibliotheken:

  • Python: xml.etree.ElementTree (eingebaut) oder lxml für vollständige XPath/XSLT-Unterstützung. Verwenden Sie lxml für XRechnung-Verarbeitung.
  • JavaScript/Node.js: Die fast-xml-parser-Bibliothek (in unseren Browser-Tools verwendet) oder xml2js für einfache Fälle. Verwenden Sie DOMParser in Browser-Umgebungen.
  • Java: JAXB für Binding, SAX für Streaming, DOM für baumbasiertes Parsing.
  • C#/.NET: System.Xml-Namespace mit XmlDocument (DOM) oder XmlReader (Streaming).
  • Go: encoding/xml (eingebaut) für einfaches Parsing; github.com/lestrrat-go/libxml2 für vollständige XPath-Unterstützung.

Häufige XML-Fallstricke bei der E-Rechnungsstellung

  • BOM (Byte Order Mark): Das Hinzufügen eines UTF-8-BOM (\xEF\xBB\xBF) am Anfang einer XML-Datei kann Parser beschädigen, die es nicht erwarten. Vermeiden Sie BOM in XRechnung-Dateien.
  • Kodierungs-Mismatch: encoding='UTF-8' deklarieren, aber Nicht-UTF-8-Bytes schreiben, führt zu einem Parse-Fehler.
  • Leerraumempfindlichkeit: In manchen XML-Kontexten ist Leerzeichen innerhalb von Tags signifikant. Fügen Sie keine Leerzeichen in Elementnamen oder Attributnamen ein.
  • Leere Elemente: <Element></Element> und <Element/> sind semantisch äquivalent, aber manche Parser oder Validatoren bevorzugen eine Form.
  • Namespace-Präfix-Konsistenz: Das Präfix (cbc, cac) ist beliebig – nur die Namespace-URI zählt. Sie können Präfixe frei umbenennen, solange die URI gleich bleibt.

Häufig gestellte Fragen

Sollte ich XML oder JSON für neue Projekte verwenden?

Für neue Web-APIs und Microservices wird JSON aufgrund seiner geringeren Größe und nativen JavaScript-Unterstützung typischerweise bevorzugt. Für Dokumentenaustausch, Rechnungsstellung, Konfiguration und jeden Anwendungsfall, der Schemas, Namespaces oder Transformations-Pipelines erfordert, bleibt XML die bessere Wahl. XRechnung wird auf absehbare Zeit XML-basiert bleiben.

Warum ist XRechnung-XML so ausführlich?

XRechnung verwendet die UBL- oder CII-Schemas, die für globale Interoperabilität konzipiert sind und Namespaces sowie Komponentenbibliotheken beinhalten, die zur Ausführlichkeit beitragen. Dies ist beabsichtigt – die Ausführlichkeit macht das Schema erweiterbar und verhindert Mehrdeutigkeiten im internationalen Dokumentenaustausch. Komprimierung (gzip) reduziert den Übertragungsaufwand, wenn die Größe eine Rolle spielt.

XMLDeveloperXRechnungParsingNamespaces