Start · Sprachen · PHP · Referenz · xml_set_default_handler

xml_set_default_handler

Funktion

Setzt einen Standard-Handler für einen XML-Parser, der alle XML-Daten verarbeitet, die von keinem anderen spezifischen Handler behandelt werden.

seit PHP 4.0.0 Kategorie: xml

Signatur

xml_set_default_handler(XMLParser $parser, callable $handler): bool

Beschreibung

Mit xml_set_default_handler() wird ein Callback-Handler registriert, der für alle XML-Eingaben aufgerufen wird, die von keinem der anderen Handler (z. B. Element-, Zeichen- oder Processing-Instruction-Handler) verarbeitet werden. Dazu gehören unter anderem die XML-Deklaration (<?xml version="1.0"?>), DOCTYPE-Deklarationen sowie sonstige Daten, die nicht explizit behandelt werden.

Der Standard-Handler dient als Auffangnetz und ist nützlich, wenn man vollständige Kontrolle über alle XML-Eingaben haben möchte – etwa zum Debuggen, zur vollständigen Protokollierung oder wenn man sicherstellen möchte, dass keine Daten unbeachtet bleiben.

Der Handler-Callback erhält zwei Parameter: die XML-Parser-Instanz und den verarbeiteten Datenstück als String. Er hat keinen Rückgabewert, der die weitere Verarbeitung beeinflusst.

Hinweis: Diese Funktion gehört zur prozeduralen xml_*-API. Für objektorientierte Verwendung steht alternativ die Klasse XMLParser (ab PHP 8.0) zur Verfügung.

Parameter

Name Typ Default Beschreibung
$parser Pflicht XMLParser Die XML-Parser-Instanz, die zuvor mit xml_parser_create() oder xml_parser_create_ns() erstellt wurde.
$handler Pflicht callable Ein aufrufbares Callback mit der Signatur handler(XMLParser $parser, string $data): void. $data enthält den rohen XML-Text, der vom Standard-Handler verarbeitet wird. Wird ein leerer String '' oder false übergeben, wird der Handler deaktiviert.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false wenn der übergebene $parser keine gültige XML-Parser-Instanz ist.

Beispiele

Standard-Handler zum Protokollieren nicht erfasster XML-Daten

<?php
$parser = xml_parser_create();

// Element-Handler für bekannte Tags
xml_set_element_handler(
    $parser,
    function ($parser, $name, $attrs) {
        echo "Öffnendes Tag: $name\n";
    },
    function ($parser, $name) {
        echo "Schließendes Tag: $name\n";
    }
);

// Standard-Handler fängt alles andere ab (z. B. XML-Deklaration)
xml_set_default_handler($parser, function ($parser, $data) {
    $trimmed = trim($data);
    if ($trimmed !== '') {
        echo "Standard-Handler: " . htmlspecialchars($trimmed) . "\n";
    }
});

$xml = '<?xml version="1.0" encoding="UTF-8"?><root><item>Test</item></root>';
xml_parse($parser, $xml, true);
xml_parser_free($parser);
Standard-Handler: <?xml version="1.0" encoding="UTF-8"?> Öffnendes Tag: ROOT Öffnendes Tag: ITEM Schließendes Tag: ITEM Schließendes Tag: ROOT

Vollständige Erfassung aller XML-Bestandteile inkl. DOCTYPE

<?php
$parser = xml_parser_create();

$log = [];

xml_set_default_handler($parser, function ($parser, $data) use (&$log) {
    $log[] = $data;
});

$xml = '<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd"><note><body>Hallo</body></note>';
xml_parse($parser, $xml, true);
xml_parser_free($parser);

echo "Erfasste Standard-Handler-Daten:\n";
foreach ($log as $entry) {
    echo '  ' . htmlspecialchars(trim($entry)) . "\n";
}
Erfasste Standard-Handler-Daten: <?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd">

// Wichtig · Fallstricke

Zeichenkodierung: Die an den Handler übergebenen Daten werden in der Kodierung geliefert, die der Parser intern verwendet (standardmäßig UTF-8). Bei Verwendung von xml_parser_create() mit einer abweichenden Kodierung (z. B. ISO-8859-1) sollte dies berücksichtigt werden.

Case-Folding: Anders als bei Element- oder Attribut-Namen hat das Case-Folding (Umwandlung in Großbuchstaben) keinen Einfluss auf die Daten im Standard-Handler – der Rohtext wird unverändert übergeben.

Deaktivierung: Der Handler kann deaktiviert werden, indem als $handler ein leerer String '' oder false übergeben wird.