Start · Sprachen · PHP · Referenz · xml_error_string

xml_error_string

Funktion

Gibt die lesbare Fehlermeldung zu einem XML-Parser-Fehlercode zurück.

seit PHP 4.0.0 Kategorie: xml

Signatur

xml_error_string(int $code): string

Beschreibung

xml_error_string() wandelt einen numerischen XML-Fehlercode in einen menschenlesbaren englischen Fehlertext um. Die Fehlercodes werden typischerweise über xml_get_error_code() ermittelt, nachdem ein XML-Parser beim Parsen eines Dokuments auf ein Problem gestoßen ist.

Die Funktion ist Teil der ereignisbasierten Expat-XML-Parser-Erweiterung von PHP und arbeitet eng mit Funktionen wie xml_parse(), xml_get_error_code(), xml_get_current_line_number() und xml_get_current_column_number() zusammen. Gemeinsam ermöglichen sie eine präzise Fehlerdiagnose beim Verarbeiten von XML-Dokumenten.

Typischer Einsatz ist die strukturierte Fehlerbehandlung nach einem fehlgeschlagenen xml_parse()-Aufruf: Man liest den Fehlercode aus, holt den zugehörigen Text mit xml_error_string() und kombiniert ihn mit Zeilen- und Spalteninformation zu einer aussagekräftigen Fehlermeldung.

  • Liefert false, wenn der übergebene Code keinem bekannten Fehlercode entspricht.
  • Die zurückgegebene Zeichenkette ist immer auf Englisch, da sie direkt aus der zugrundeliegenden Expat-Bibliothek stammt.

Parameter

Name Typ Default Beschreibung
$code Pflicht int Ein numerischer XML-Fehlercode, wie er von xml_get_error_code() zurückgegeben wird. Gültige Werte entsprechen den XML_ERROR_*-Konstanten.

Rückgabewert

Typ
string|false
Beschreibung
Gibt eine englische Fehlermeldung als Zeichenkette zurück, die dem angegebenen Fehlercode entspricht. Gibt false zurück, wenn code keinem gültigen XML-Fehlercode entspricht.

Beispiele

Einfache Fehlerdiagnose nach fehlgeschlagenem xml_parse()

<?php
$parser = xml_parser_create();

$ungueltigesXml = '<root><offen>Text ohne schließendes Tag</root>';

if (!xml_parse($parser, $ungueltigesXml, true)) {
    $fehlerCode   = xml_get_error_code($parser);
    $fehlerText   = xml_error_string($fehlerCode);
    $zeile        = xml_get_current_line_number($parser);
    $spalte       = xml_get_current_column_number($parser);

    echo sprintf(
        "XML-Fehler: %s (Code %d) in Zeile %d, Spalte %d\n",
        $fehlerText,
        $fehlerCode,
        $zeile,
        $spalte
    );
}

xml_parser_free($parser);
XML-Fehler: mismatched tag (Code 76) in Zeile 1, Spalte 45

Fehlercode direkt mit XML_ERROR_*-Konstante nachschlagen

<?php
// Fehlermeldung für bekannte XML-Fehlerkonstanten ausgeben
$codes = [
    XML_ERROR_NONE,
    XML_ERROR_NO_MEMORY,
    XML_ERROR_SYNTAX,
    XML_ERROR_UNDEFINED_ENTITY,
    XML_ERROR_RECURSIVE_ENTITY_REF,
];

foreach ($codes as $code) {
    printf("Code %2d: %s\n", $code, xml_error_string($code));
}

// Ungültiger Code
var_dump(xml_error_string(9999));
Code 0: Code 1: out of memory Code 2: syntax error Code 9: undefined entity Code 10: recursive entity reference bool(false)

// Wichtig · Fallstricke

Hinweis zur Erweiterung: Die Expat-basierte XML-Parser-Erweiterung (ext/xml) ist in PHP 8 weiterhin vorhanden, aber für komplexe XML-Verarbeitung empfiehlt sich der Einsatz von SimpleXML, DOMDocument oder XMLReader, die teilweise bessere Fehlermeldungen und mehr Funktionsumfang bieten.

Sprache der Fehlermeldungen: Die zurückgegebenen Texte sind immer Englisch und kommen direkt aus der Expat-Bibliothek. Eine Übersetzung in die Anwendungssprache muss manuell anhand des Fehlercodes erfolgen.

Rückgabe bei Fehlercode 0: XML_ERROR_NONE (Wert 0) bedeutet kein Fehler; xml_error_string(0) gibt eine leere Zeichenkette zurück, nicht false.