Alle Artikel

XML Entities: Zeichen in XML-Dokumenten escapen

Wie HTML verwendet auch XML spitze Klammern und das Et-Zeichen zur Auszeichnung von Tags — deshalb dürfen diese Zeichen nicht unverändert im Textinhalt stehen. Das Dokument wird sonst ungültig, und der Parser bricht mit einem Fehler ab, statt das Problem stillschweigend zu ignorieren.

Die fünf vorgeschriebenen Entities

Anders als HTML, das Hunderte benannter Entities definiert, verlangt die XML-Spezifikation nur fünf:

  • &lt; — anstelle von <
  • &gt; — anstelle von >
  • &amp; — anstelle von &
  • &apos; — anstelle des einfachen Anführungszeichens '
  • &quot; — anstelle des doppelten Anführungszeichens "

Anführungszeichen müssen nur innerhalb von Attributwerten maskiert werden, während < und & in jedem Textinhalt maskiert werden müssen.

Wo das in der Praxis auftaucht

Die deutschen E-Rechnungsstandards XRechnung und ZUGFeRD basieren auf XML, und ein Firmenname mit Et-Zeichen — "Müller & Söhne" — macht die gesamte Rechnung ungültig, wenn er nicht escapt ist. Dasselbe Problem trifft RSS-Feeds von Nachrichtenseiten: eine Schlagzeile mit einem nicht maskierten & zerstört den gesamten Feed für jeden, der ihn abonniert hat.

Warum XML strenger ist als HTML

Browser tolerieren fehlerhaftes HTML meist und versuchen die Seite trotz Fehlern darzustellen. XML-Parser tun das nicht: Ein einziges nicht maskiertes Et-Zeichen oder eine spitze Klammer macht das gesamte Dokument ungültig, und die Verarbeitung bricht mit einem Fehler ab.

Wann man das braucht

  • Benutzereingaben vorbereiten, bevor sie in ein XML-Dokument eingefügt werden (Feeds, Konfigurationsdateien, SOAP-Nachrichten).
  • Diagnose: den rohen Text sehen, der sich hinter Entities in einem empfangenen XML verbirgt.
  • XML-Dateien von Hand bearbeiten, ohne die Dokumentstruktur zu zerstören.

Die Alternative zu Entities: der CDATA-Abschnitt

Enthält ein Textblock viele Sonderzeichen — etwa ein Stück HTML oder Code innerhalb von XML —, ist es oft praktischer, ihn in <![CDATA[...]]> einzuschließen: Dort müssen < und & nicht maskiert werden und gelten als reiner Text. Die einzige Ausnahme ist die Zeichenfolge ]]>, die den CDATA-Abschnitt beendet und deshalb nicht im Inhalt selbst vorkommen darf.

Tool ausprobieren