Aktualisiert am 9. Oktober 2026
Das Wichtigste in Kürze
- XML-Dokumente müssen wohlgeformt sein: genau ein Wurzelelement, jedes Tag geschlossen, korrekt verschachtelt, Groß-/Kleinschreibung beachtet, Attributwerte in Anführungszeichen.
- Schon ein einziger Syntaxfehler reicht, und ein XML-Parser bricht ab. Anders als Browser bei HTML „repariert" er nichts.
- Maßgeblich ist bis heute XML 1.0 (aktuell die 5. Ausgabe von 2008). XML 1.1 existiert, spielt in der Praxis aber kaum eine Rolle.
- Namensräume, Schemas (XSD) und DTDs sind Zusätze. Die Grundsyntax kommt ohne sie aus.
Du suchst erst einmal eine einfache Einführung, wofür XML überhaupt gut ist? Dann starte mit Was ist XML? Einfach erklärt für Einsteiger. Hier geht es um die Regeln im Detail.
Herkunft: von SGML zu XML 1.0
XML 1.0 wurde im Februar 1998 vom W3C als Empfehlung veröffentlicht und sollte die Beschränkungen seines Vorgängers, der Standard Generalized Markup Language (SGML), beseitigen und gleichzeitig die Kompatibilität mit SGML-Konzepten wahren. Genau genommen ist XML ein vereinfachtes Profil von SGML: Viele Sonderfälle wie weggelassene End-Tags fielen weg, damit Parser einfacher und strenger arbeiten können. Zu den Editoren der Spezifikation gehörten Tim Bray, C. M. Sperberg-McQueen und später Jean Paoli.
Aufbau eines XML-Dokuments
<?xml version="1.0" encoding="UTF-8"?>
<!-- Kommentar: Artikelliste für den Shop -->
<katalog>
<artikel id="A-100" verfuegbar="true">
<name>USB-C-Kabel, 1 m</name>
<preis waehrung="EUR">9.90</preis>
<leer/>
</artikel>
</katalog>
| Bestandteil | Beispiel | Hinweis |
|---|---|---|
| XML-Deklaration | <?xml version="1.0" encoding="UTF-8"?> |
optional, aber empfohlen; falls vorhanden, muss sie ganz am Anfang stehen |
| Wurzelelement | <katalog> |
genau eines pro Dokument |
| Element | <name>…</name> |
Start-Tag, Inhalt, End-Tag |
| Leeres Element | <leer/> |
Kurzform für <leer></leer> |
| Attribut | id="A-100" |
Name-Wert-Paar im Start-Tag |
| Kommentar | <!-- … --> |
darf kein -- enthalten |
| Zeichendaten | USB-C-Kabel, 1 m |
der eigentliche Text |
Die Regeln für wohlgeformtes XML
- Genau ein Wurzelelement. Alle anderen Elemente liegen darin.
- Jedes Element wird geschlossen, entweder mit End-Tag oder als leeres Element
<tag/>. - Korrekte Verschachtelung:
<a><b></b></a>ist erlaubt,<a><b></a></b>nicht. - Groß- und Kleinschreibung zählt:
<Titel>und</titel>passen nicht zusammen. - Attributwerte stehen in Anführungszeichen, doppelt oder einfach. Jedes Attribut darf pro Element nur einmal vorkommen.
- Namensregeln: Element- und Attributnamen dürfen nicht mit einer Ziffer, einem Bindestrich oder einem Punkt beginnen und keine Leerzeichen enthalten. Namen, die mit
xmlbeginnen (in beliebiger Schreibweise), sind reserviert. - Sonderzeichen maskieren:
<und&dürfen im Text nicht roh vorkommen. - Korrekte Zeichenkodierung: Die Datei muss tatsächlich in der angegebenen Kodierung gespeichert sein. Ohne Angabe gehen Parser von UTF-8 oder UTF-16 aus.
Entitäten, Zeichenreferenzen und CDATA
XML kennt fünf vordefinierte Entitäten:
| Zeichen | Entität | Pflicht? |
|---|---|---|
< |
< |
im Text immer |
& |
& |
im Text immer |
> |
> |
nur in der Folge ]]> nötig |
" |
" |
in Attributwerten mit " als Begrenzer |
' |
' |
in Attributwerten mit ' als Begrenzer |
Jedes Unicode-Zeichen kannst du außerdem als Zeichenreferenz schreiben, dezimal € oder hexadezimal € (beides ergibt €). HTML-Entitäten wie oder € kennt XML dagegen nicht, außer eine DTD definiert sie.
Für längere Passagen mit vielen Sonderzeichen, etwa Code-Schnipsel, gibt es CDATA-Abschnitte. Ihr Inhalt wird nicht als Markup interpretiert:
<code><![CDATA[if (a < b && b > c) { ... }]]></code>
Einzige Einschränkung: Die Zeichenfolge ]]> darf innerhalb von CDATA nicht vorkommen.
Elemente oder Attribute?
Eine feste Regel gibt es nicht, aber eine bewährte Faustregel:
- Attribute für Metadaten und kurze, einfache Werte: IDs, Einheiten, Sprachcodes (
waehrung="EUR"). - Elemente für die eigentlichen Daten, für alles, was mehrfach vorkommen kann, und für alles, was selbst Struktur haben könnte.
Attribute haben keine garantierte Reihenfolge und können nicht verschachtelt werden. Wer später erweitern will, fährt mit Elementen meist besser.
Namensräume (Namespaces)
Namensräume kamen nicht mit XML 1.0, sondern mit der eigenen Empfehlung Namespaces in XML (Januar 1999). Sie lösen Namenskonflikte, wenn mehrere Vokabulare in einem Dokument vorkommen:
<rechnung xmlns="https://example.com/rechnung"
xmlns:adr="https://example.com/adresse">
<nummer>2026-0815</nummer>
<adr:anschrift>
<adr:ort>Berlin</adr:ort>
</adr:anschrift>
</rechnung>
Die URI dient nur als eindeutiger Name. Der Parser ruft sie nicht auf, sie muss also nicht erreichbar sein. Entscheidend ist die URI, nicht das Präfix: adr:ort und a:ort sind identisch, wenn beide Präfixe auf dieselbe URI zeigen.
Wohlgeformt vs. gültig
Wohlgeformtheit prüft nur die Syntax. Ob die richtigen Elemente in der richtigen Reihenfolge und mit sinnvollen Werten vorkommen, regelt eine DTD oder ein XML Schema. Wie das mit XSD funktioniert, zeigt der Artikel XML Schema (XSD) mit einem vollständigen Beispiel.
Typische Fehler und was der Parser meldet
Die Meldungen stammen aus xmllint --noout datei.xml (libxml2):
| Fehler | Beispiel | Meldung |
|---|---|---|
Unmaskiertes & |
<titel>Tom & Jerry</titel> |
xmlParseEntityRef: no name |
| Falsche Verschachtelung | <a><b></a></b> |
Opening and ending tag mismatch |
| Zwei Wurzelelemente | <a/><b/> |
Extra content at the end of the document |
| Groß-/Kleinschreibung | <Titel>x</titel> |
Opening and ending tag mismatch: Titel … and titel |
| Attribut ohne Anführungszeichen | <a x=1/> |
AttValue: " or ' expected |
Zum schnellen Prüfen reichen xmllint auf der Kommandozeile, die XML-Unterstützung gängiger Code-Editoren oder das Öffnen der Datei in einem Browser. Firefox und Chrome zeigen bei nicht wohlgeformtem XML eine Fehlerseite mit Zeilenangabe.
XML 1.0 und XML 1.1
| XML 1.0 | XML 1.1 | |
|---|---|---|
| Erstveröffentlichung | 10. Februar 1998 | 4. Februar 2004 |
| Aktuelle Ausgabe | 5. Ausgabe, 26. November 2008 | 2. Ausgabe, 16. August 2006 |
| Wichtigste Unterschiede | – | erlaubt u. a. die meisten Steuerzeichen als Zeichenreferenz und behandelt zusätzliche Zeilenende-Zeichen |
| Praxis | Standard für praktisch alle Formate | selten genutzt |
Die 5. Ausgabe von XML 1.0 hat die Regeln für Namen bereits stark gelockert. Deshalb gibt es kaum noch Gründe für 1.1. Schreib version="1.0", solange ein Format nicht ausdrücklich 1.1 verlangt.
FAQ
Muss die XML-Deklaration in der ersten Zeile stehen?
Wenn sie vorhanden ist, ja: Vor <?xml darf nichts stehen, auch kein Leerzeichen und keine Leerzeile. Nur eine Byte-Order-Mark (BOM) ist erlaubt.
Darf ein Elementname Umlaute enthalten?
Ja, XML erlaubt Unicode-Buchstaben in Namen, <straße> ist gültig. Für Schnittstellen mit anderen Systemen sind ASCII-Namen trotzdem die robustere Wahl.
Warum zeigt mein XML-Parser einen Fehler, obwohl die Datei im Browser als HTML funktioniert?
HTML-Parser sind fehlertolerant, XML-Parser nicht. Nicht geschlossene Tags wie <br> oder Entitäten wie sind in XML Fehler.
Ist XHTML noch relevant?
Die XML-Schreibweise von HTML gibt es weiterhin als Teil des HTML Living Standard. Die meisten Websites nutzen aber die normale HTML-Syntax.







