W3docs

xml_error_string()

Die Funktion xml_error_string() ist eine PHP-Funktion, die eine Fehlerbeschreibung eines XML-Parser-Fehlers als String zurückgibt.

Die Funktion xml_error_string() ist eine in PHP integrierte Funktion, die eine String-Beschreibung eines XML-Parser-Fehlers abruft. Sie gehört zur veralteten XML-Parser-Erweiterung. Beim Parsen von XML-Dateien mit SimpleXML oder anderen modernen Bibliotheken werden Fehler in der Regel stattdessen mit libxml_get_errors() behandelt, da die veraltete xml-Erweiterung in modernem PHP als veraltet gilt.

Die Funktion xml_error_string() ist nützlich, wenn Sie eine benutzerfreundliche Fehlermeldung für veraltete XML-Parsing-Workflows abrufen müssen. Moderne Anwendungen sollten jedoch libxml_get_errors() für SimpleXML bevorzugen.

Syntax

Die Syntax der Funktion xml_error_string() lautet wie folgt:

Syntax der Funktion xml_error_string()

xml_error_string(int $error_code): string|false

Parameter

  • $error_code — ein ganzzahliger Fehlercode, wie er von xml_get_error_code() zurückgegeben wird. Die XML-Parser-Erweiterung stellt diese Codes als XML_ERROR_*-Konstanten bereit (zum Beispiel ist XML_ERROR_NONE 0, was „kein Fehler" bedeutet).

Rückgabewert

xml_error_string() gibt einen menschenlesbaren String zurück, der den angegebenen Fehlercode beschreibt (z. B. "Attribute without value"). Wenn der Code unbekannt ist, gibt sie false zurück. Beachten Sie, dass die Funktion nur einen Code in Text umwandelt – sie teilt Ihnen nicht mit, wo im Dokument der Fehler aufgetreten ist. Dazu benötigen Sie zusätzlich xml_get_current_line_number() und xml_get_current_column_number().

Verwendungsbeispiele

Schauen wir uns einige praktische Beispiele zur Verwendung von xml_error_string() in PHP an.

Beispiel 1: Abrufen eines XML-Parser-Fehler-Strings (Legacy XML Parser)

Die Funktion xml_error_string() arbeitet mit der veralteten XML-Parser-Erweiterung. Sie können damit XML parsen und den Fehler-String abrufen, wie folgt:

XML-Datei parsen und Fehler-String mit xml_error_string() in PHP abrufen

$parser = xml_parser_create();
$xml_data = "<invalid xml>";
xml_parse($parser, $xml_data);

$error_code = xml_get_error_code($parser);
if ($error_code !== XML_ERROR_NONE) {
  $error_string = xml_error_string($error_code);
  echo "Error: $error_string";
}

xml_parser_free($parser);

Dieser Code erstellt einen XML-Parser mit xml_parser_create(), versucht den fehlerhaften String "<invalid xml>" zu parsen (xml wird dabei als Attributname ohne Wert gelesen) und prüft auf Fehler. xml_get_error_code() gibt einen von null abweichenden Code zurück, xml_error_string() wandelt diesen Code in Text um, und das Skript gibt den Parser mit xml_parser_free() frei.

Ausgabe:

Error: Attribute without value

Beispiel 2: Den genauen Ort des Fehlers bestimmen

Ein bloßer Fehler-String hilft einem Entwickler selten dabei, das Dokument zu korrigieren. Kombinieren Sie xml_error_string() mit den Zeilen- und Spaltennummer-Funktionen, um genau anzugeben, wo der Parser aufgehört hat:

Fehlermeldung zusammen mit dem Ort des Fehlers anzeigen

$parser = xml_parser_create();
$xml_data = "<book>\n  <title>Hi</titlex>\n</book>";

if (!xml_parse($parser, $xml_data, true)) {
  $code = xml_get_error_code($parser);
  printf(
    "Error %d: %s at line %d, column %d\n",
    $code,
    xml_error_string($code),
    xml_get_current_line_number($parser),
    xml_get_current_column_number($parser)
  );
}

xml_parser_free($parser);

Hier stimmt das schließende Tag </titlex> nicht mit dem öffnenden <title> überein, sodass das Parsen in Zeile 2 fehlschlägt. Die Positionsfunktionen geben die genaue Stelle an:

Ausgabe:

Error 76: Mismatched tag at line 2, column 21

Der genaue numerische Code und seine Formulierung hängen von Ihrer libxml-Version ab, aber xml_error_string() gibt immer die passende menschenlesbare Meldung für den von xml_get_error_code() gemeldeten Code zurück.

Beispiel 2: Behandlung von SimpleXML-Fehlern (empfohlener moderner Ansatz)

Wenn Sie die SimpleXML-Bibliothek verwenden, ist xml_error_string() nicht anwendbar. Verwenden Sie stattdessen libxml_use_internal_errors(true) und libxml_get_errors(), um Parsing-Fehler zu behandeln:

Anzeigen einer XML-Parser-Fehlermeldung

libxml_use_internal_errors(true);

if (isset($_FILES["xml_file"])) {
  $xml = simplexml_load_file($_FILES["xml_file"]["tmp_name"]);
  if ($xml === false) {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
      echo "Error: " . $error->message;
    }
  } else {
    // process the XML file
  }
}

Dieser Code aktiviert die interne Fehlerbehandlung für SimpleXML, prüft, ob eine XML-Datei über das $_FILES-Array hochgeladen wurde, und versucht, die Datei zu laden. Wenn beim Parsen ein Fehler auftritt, ruft er die Fehlerdetails mit libxml_get_errors() ab und zeigt die Fehlermeldung dem Benutzer an. Wenn keine Fehler auftreten, kann der Code die XML-Datei wie gewünscht verarbeiten.

Häufige XML-Parser-Fehlercodes

Die XML-Parser-Erweiterung definiert benannte Konstanten für die Fälle „kein Fehler" und korrekte Wohlgeformtheit. Der einzige Wert, auf den Sie sich immer verlassen können, ist XML_ERROR_NONE (0), was bedeutet, dass das Parsen erfolgreich war. Einige häufige niedrige Codes und die Strings, die xml_error_string() für sie zurückgibt, sind:

CodeMeldung von xml_error_string()
0No error (matches XML_ERROR_NONE)
1No memory
2Invalid document start
3Empty document
4Not well-formed (invalid token)
5Invalid document end

Hinweis: Der tatsächliche ganzzahlige Wert, den ein echter Parse-Vorgang zurückgibt, und dessen Formulierung werden von der zugrundeliegenden libxml-Bibliothek erzeugt und variieren je nach PHP/libxml-Version. Übergeben Sie daher immer den aktuellen Wert von xml_get_error_code() an xml_error_string(), anstatt eine feste Zahl anzunehmen. Nur die XML_ERROR_NONE (0) -Prüfung auf Erfolg ist versionsübergreifend stabil.

Der Vergleich mit XML_ERROR_NONE (anstatt einer hartkodierten 0) macht die Absicht Ihrer Erfolgsprüfung deutlicher.

Verwandte Funktionen

Fazit

In diesem Artikel haben wir die PHP-Funktion xml_error_string() und ihre Verwendung zum Abrufen einer String-Beschreibung eines XML-Parser-Fehlers in veralteten XML-Parsing-Workflows besprochen. Wir haben erläutert, was die Funktion tut, ihre Syntax erklärt und Beispiele für ihre Verwendung gegeben. Für moderne PHP-Anwendungen, die SimpleXML verwenden, empfehlen wir den Einsatz von libxml_use_internal_errors(true) und libxml_get_errors() zur Behandlung von Parsing-Fehlern, um Ihre Webanwendungen robuster und benutzerfreundlicher zu gestalten.

Übungen

Übung
Was macht die Funktion libxml_get_errors() in PHP?
Was macht die Funktion libxml_get_errors() in PHP?
Was this page helpful?