Signatur
Beschreibung
LibXMLError ist eine einfache Datenklasse, deren Instanzen von den Funktionen libxml_get_errors() und libxml_get_last_error() zurückgegeben werden. Sie kapselt alle relevanten Fehlerinformationen, die libxml beim Parsen oder Validieren von XML- oder HTML-Dokumenten erzeugt.
Die Klasse besitzt keine Methoden, sondern ausschließlich öffentliche Eigenschaften: level (Schweregrad als Integer, entspricht den Konstanten LIBXML_ERR_WARNING, LIBXML_ERR_ERROR oder LIBXML_ERR_FATAL), code (numerischer Fehlercode), column (Spaltenposition), message (lesbare Fehlermeldung), file (Dateiname oder leer bei String-Input) und line (Zeilennummer im Dokument).
Typischerweise aktiviert man die interne Fehlersammlung mit libxml_use_internal_errors(true), führt dann eine XML/HTML-Operation durch und wertet anschließend den Fehler-Stack über libxml_get_errors() aus, was ein Array von LibXMLError-Objekten liefert. Nach der Auswertung sollte der Stack mit libxml_clear_errors() geleert werden.
Diese Klasse ist besonders nützlich, wenn robuste XML-Verarbeitung benötigt wird, zum Beispiel beim Importieren externer Feeds oder beim Validieren von Benutzereingaben, da sie eine differenzierte Fehlerbehandlung ohne trigger_error()-Meldungen ermöglicht.
Beispiele
Fehler beim Parsen von ungültigem XML auswerten
<?php
libxml_use_internal_errors(true);
$xml = simplexml_load_string('<root><unclosed></root>');
if ($xml === false) {
$errors = libxml_get_errors();
foreach ($errors as $error) {
$type = match ($error->level) {
LIBXML_ERR_WARNING => 'Warnung',
LIBXML_ERR_ERROR => 'Fehler',
LIBXML_ERR_FATAL => 'Fataler Fehler',
default => 'Unbekannt',
};
printf(
"[%s] Code %d in Zeile %d, Spalte %d: %s",
$type,
$error->code,
$error->line,
$error->column,
trim($error->message)
);
echo PHP_EOL;
}
libxml_clear_errors();
}
HTML mit DOMDocument laden und Fehler protokollieren
<?php
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML('<html><body><p>Offen<b>Fett</p></b></body></html>');
$errors = libxml_get_errors();
foreach ($errors as $error) {
if ($error->level >= LIBXML_ERR_ERROR) {
echo 'XML-Fehler in Zeile ' . $error->line . ': ' . trim($error->message) . PHP_EOL;
}
}
libxml_clear_errors();
libxml_use_internal_errors(false);
echo $dom->saveHTML($dom->getElementsByTagName('p')->item(0));
// Wichtig · Fallstricke
Fehler-Stack leeren: Nach der Fehlerauswertung immer libxml_clear_errors() aufrufen, da der Stack global ist und sich über mehrere Operationen hinweg ansammeln kann — was zu Verwirrung bei der Fehlerdiagnose führt.
Spaltenangabe: Die column-Eigenschaft ist nicht immer präzise und sollte nur als grobe Orientierung dienen.
PHP 8.0+: LibXMLError-Objekte können nicht direkt instanziiert werden; sie werden ausschließlich intern von der libxml-Extension erzeugt.