Wenn Sie jemals mit Legacy-Enterprise-APIs gearbeitet, RSS-Feeds konsumiert, eine .docx-Datei geöffnet oder eine SVG-Grafik erstellt haben, haben Sie XML verwendet — auch wenn Sie es nicht wussten. XML treibt mehr von der Software-Welt an, als die meisten Entwickler erkennen. Es ist älter als JSON, ausführlicher und komplexer — aber in bestimmten Kontexten auch leistungsfähiger. Dies ist ein praktischer Leitfaden dazu, was XML wirklich ist, wie es funktioniert und wann es noch sinnvoll ist, es zu verwenden.

XML steht für eXtensible Markup Language (Erweiterbare Auszeichnungssprache). Das W3C veröffentlichte die XML 1.0-Spezifikation im Jahr 1998, und es wurde das dominierende Datenaustauschformat der frühen Web-Ära. Der Teil "erweiterbar" ist entscheidend: Anders als HTML, das einen festen Satz von Tags hat, ermöglicht XML das Definieren eigener Tags zur Beschreibung jeder benötigten Datenstruktur.

Wie XML aussieht

Hier ist ein vollständiges XML-Dokument, das ein Produkt aus einer E-Commerce-API darstellt. Es deckt alle wichtigen Syntaxmerkmale ab, denen Sie begegnen werden:

xml
<?xml version="1.0" encoding="UTF-8"?>
<product id="SKU-8821" inStock="true">
  <name>Wireless Noise-Cancelling Headphones</name>
  <brand>SoundCore</brand>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
    <category>Accessories</category>
  </categories>
  <specs>
    <spec name="battery">30 hours</spec>
    <spec name="connectivity">Bluetooth 5.2</spec>
    <spec name="weight">250g</spec>
  </specs>
  <description>
    Premium wireless headphones with active noise cancellation,
    30-hour battery life, and foldable design.
  </description>
</product>

Analysieren wir die wichtigsten Teile. Die erste Zeile ist die XML-Deklaration — sie teilt Parsern mit, dass dies XML 1.0 in UTF-8 kodiert ist. Das <product>-Tag ist das Wurzelelement (jedes XML-Dokument hat genau eines). Die Teile id und inStock in diesem Tag sind Attribute. Alles innerhalb der öffnenden und schließenden Tags sind entweder Kindelemente, Attribute oder Textinhalt.

Elemente vs. Attribute — Eine echte Designentscheidung

Etwas, das neue XML-Autoren oft überrascht: Sie können dieselben Daten als Element oder als Attribut darstellen. Beide sind gültiges XML für dieselben Daten:

xml
<!-- Als Attribut -->
<price currency="USD">149.99</price>

<!-- Als Kindelement -->
<price>
  <amount>149.99</amount>
  <currency>USD</currency>
</price>

Die gängige Empfehlung: Verwenden Sie Attribute für Metadaten über das Element (Bezeichner, Flags, Einheiten), und verwenden Sie Kindelemente für den eigentlichen Dateninhalt — besonders wenn der Inhalt komplex, wiederholt oder in Zukunft eigene Attribute benötigen könnte. Attribute können nur Klartext enthalten; Kindelemente können jede XML-Struktur aufnehmen.

Wohlgeformt vs. Gültig — Zwei verschiedene Standards

XML hat zwei Korrektheitsstufen, die häufig verwechselt werden:

  • Wohlgeformtes XML folgt den grundlegenden Syntaxregeln: ein Wurzelelement, alle Tags korrekt geschlossen, Attribute in Anführungszeichen, keine illegalen Zeichen. Jeder XML-Parser kann dies prüfen.
  • Gültiges XML entspricht einem bestimmten Schema — entweder einer DTD (Document Type Definition) oder einem XML-Schema (XSD). Die Gültigkeitsprüfung erfordert sowohl das Dokument als auch das Schema. Sie können wohlgeformtes XML haben, das gegen ein bestimmtes Schema nicht gültig ist.
In der Praxis: Die meisten Enterprise-XML-Integrationen kümmern sich um die Gültigkeit, nicht nur um die Wohlgeformtheit. Wenn Sie eine SOAP-Integration aufbauen oder HL7-Gesundheitsdatensätze austauschen, definiert das Schema genau, welche Elemente erforderlich sind, welche Typen sie enthalten und welche Werte erlaubt sind. Verwenden Sie den XML-Validator, um die Wohlgeformtheit schnell zu prüfen.

Wo XML in der realen Welt vorkommt

  • SOAP-Webservices. Die ältere Hälfte der Unternehmenssoftware läuft noch auf SOAP — Bank-APIs, ERP-Systeme, Zahlungsgateways. Jede SOAP-Nachricht ist ein klar definiertes XML-Dokument mit Envelope, Header und Body.
  • RSS- und Atom-Feeds. Jeder Podcast-Feed, jeder Nachrichtenwebsite-Feed und jedes YouTube-Kanal-Abonnement ist ein XML-Dokument. RSS 2.0 und Atom sind XML-basierte Formate, die seit dem frühen 21. Jahrhundert existieren.
  • SVG-Bilder. Scalable Vector Graphics ist XML. Wenn Sie eine .svg-Datei in einem Texteditor öffnen, lesen Sie XML. Deshalb können Sie SVGs mit CSS stylen und mit JavaScript manipulieren.
  • Office-Dokumente. Eine .docx-, .xlsx- oder .pptx-Datei ist ein ZIP-Archiv, das XML-Dateien enthält. Office Open XML ist das Format, mit dem Microsoft alle modernen Office-Dokumentformate speichert.
  • Android-Layouts. Android-UI-Layouts werden in XML-Dateien definiert. Wenn Sie Android-Entwicklung betrieben haben, haben Sie viel XML geschrieben.
  • Maven und pom.xml. Javas Maven-Build-System verwendet eine pom.xml-Datei zur Definition von Projektabhängigkeiten und Build-Konfiguration — jedem Java-Entwickler vertraut.

XML in JavaScript parsen — DOMParser

Im Browser können Sie XML-Strings mit der eingebauten DOMParser-API parsen. Es funktioniert genauso wie das Parsen von HTML:

js
const xmlString = `<?xml version="1.0"?>
<product id="SKU-8821">
  <name>Wireless Headphones</name>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
  </categories>
</product>`;

const parser = new DOMParser();
const doc = parser.parseFromString(xmlString, 'application/xml');

// Auf Parse-Fehler prüfen
const parseError = doc.querySelector('parsererror');
if (parseError) {
  console.error('XML parse error:', parseError.textContent);
} else {
  const name = doc.querySelector('name').textContent;
  const currency = doc.querySelector('price').getAttribute('currency');
  const categories = [...doc.querySelectorAll('category')].map(el => el.textContent);

  console.log(name);       // Wireless Headphones
  console.log(currency);   // USD
  console.log(categories); // ['Electronics', 'Audio']
}

XML in Python parsen — ElementTree

Pythons Standardbibliothek enthält xml.etree.ElementTree — für das grundlegende XML-Parsen sind keine Drittanbieter-Pakete erforderlich:

python
import xml.etree.ElementTree as ET

xml_string = """<?xml version="1.0"?>
<product id="SKU-8821">
  <name>Wireless Headphones</name>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
  </categories>
</product>"""

root = ET.fromstring(xml_string)

name = root.find('name').text
currency = root.find('price').get('currency')
categories = [el.text for el in root.findall('categories/category')]

print(name)        # Wireless Headphones
print(currency)    # USD
print(categories)  # ['Electronics', 'Audio']

Die Fallstricke, die XML-Autoren erwischen

  • Entity-Kodierung. Fünf Zeichen müssen in XML-Text und Attributwerten escaped werden: &&amp;, <&lt;, >&gt;, "&quot;, '&apos;. Ein vergessenes Escaping eines Ampersands in einer URL bricht das gesamte Dokument.
  • Namespaces. Namespaced XML sieht aus wie <soap:Envelope xmlns:soap="...">. Abfragen ohne Namespace-Bewusstsein werden keine Elemente finden. Dies ist einer der häufigsten XML-Parsing-Bugs.
  • Leerraumempfindlichkeit. Leerzeichen zwischen Elementen sind in XML technisch gesehen bedeutsam (im Gegensatz zu HTML). Die meisten Parser behandeln dies vernünftig, aber es kann beim Vergleichen von Dokumenten zu Überraschungen führen.
  • Zeichenkodierung. Die XML-Deklaration sollte der tatsächlichen Dateikodierung entsprechen. Eine als ISO-8859-1 deklarierte UTF-8-Datei wird für alle Nicht-ASCII-Zeichen falsch geparst.
  • Kein nativer Array-Typ. XML hat keine Arrays. Listen werden durch das Wiederholen von Elementen dargestellt, was bedeutet, dass Parser NodeLists statt JavaScript-Arrays zurückgeben — konvertieren Sie immer mit Array.from() oder Spread.

Nützliche XML-Tools

Arbeiten Sie regelmäßig mit XML? Diese Tools sparen Ihnen Zeit: XML-Formatierer zum Formatieren komprimierter XML-Antworten, XML-Validator zur Prüfung der Wohlgeformtheit, XML zu JSON zur einfacheren Verarbeitung von XML-Antworten, und XML XPath zum Testen von XPath-Abfragen gegen ein Dokument.

Fazit

XML ist im Vergleich zu JSON ausführlich und komplex, aber kein überholtes Relikt — es ist die Grundlage von SVG, Office-Dokumenten, RSS-Feeds, SOAP-Services und Android-UIs. Das Verständnis der Element/Attribut-Unterscheidung, des Unterschieds zwischen wohlgeformtem und gültigem XML sowie der häufigen Fallstricke bei Entity-Kodierung und Namespaces wird Ihnen immer dann nützen, wenn XML in Ihrer Arbeit auftaucht. Und es wird auftauchen.