Start · Sprachen · PHP · Referenz · LibXMLError

LibXMLError

Klasse

Repräsentiert einen von libxml ausgelösten Fehler mit Informationen zu Typ, Code, Meldung und Position im Dokument.

seit PHP 5.1.0 Kategorie: error

Signatur

class LibXMLError

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();
}
[Fataler Fehler] Code 76 in Zeile 1, Spalte 22: Opening and ending tag mismatch: unclosed line 1 and root [Fataler Fehler] Code 77 in Zeile 1, Spalte 29: Extra content at the end of the document

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));
XML-Fehler in Zeile 1: Tag b invalid <p>OffenFett</p>

// 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.