xml_parser_set_option()
Die Funktion xml_parser_set_option() ist eine in PHP eingebaute Funktion, die eine Option an einem XML-Parser setzt.
Die Funktion xml_parser_set_option() ist eine in PHP eingebaute Funktion, die Konfigurationsoptionen an einem XML-Parser setzt. Sie gehört zur veralteten XML-Parser-Erweiterung (Expat), die XML im SAX-Stil analysiert — dabei werden Event-Callbacks ausgelöst, während gelesen wird — anstatt wie SimpleXML oder DOM einen Baum im Speicher aufzubauen. Sie wird nach xml_parser_create(), aber vor dem Parsen aufgerufen, um zu steuern, wie der Parser Tag-Namen-Groß-/Kleinschreibung, Leerzeichen und Zeichenkodierung behandelt.
Syntax
xml_parser_set_option(XMLParser $parser, int $option, string|int $value): bool$parser— der vonxml_parser_create()zurückgegebene Parser. Ab PHP 8.0 ist dies einXMLParser-Objekt; in PHP 7 und früher war es eine Ressource.$option— eine der unten aufgeführten Optionskonstanten.$value— der Wert, der für diese Option gesetzt werden soll.
Die Funktion gibt true bei Erfolg zurück, oder false, wenn der Parser oder die Option ungültig ist.
Verfügbare Optionen
| Konstante | Typ | Was sie steuert |
|---|---|---|
XML_OPTION_CASE_FOLDING | bool (Standard true) | Wenn aktiviert, werden Tag- und Attributnamen in Großbuchstaben umgewandelt, bevor sie Ihre Handler erreichen. Auf false setzen, um die ursprüngliche Schreibweise beizubehalten. |
XML_OPTION_SKIP_TAGSTART | int | Anzahl der Zeichen, die vom Anfang eines Tag-Namens übersprungen werden sollen. |
XML_OPTION_SKIP_WHITE | bool | Wenn true, werden Elemente, die nur Leerzeichen enthalten, übersprungen. |
XML_OPTION_TARGET_ENCODING | string | Die Kodierung, die an Ihre Handler übergeben wird — eine von ISO-8859-1 (Standard), US-ASCII oder UTF-8. |
Den aktuellen Wert auslesen mit
xml_parser_get_option(). Das Setzen einer Option, nachdem das Parsen begonnen hat, hat keine Wirkung — konfigurieren Sie den Parser daher zuerst.
Warum Case Folding wichtig ist
Dies ist die Option, die Sie am häufigsten benötigen werden. Standardmäßig wandelt der Parser jeden Tag-Namen in Großbuchstaben um, sodass ein Element <note> in Ihrem Handler als NOTE ankommt. Das überrascht alle, die Namen mit Kleinbuchstaben-Strings vergleichen. Das Deaktivieren von Case Folding behält Namen genau so, wie sie geschrieben wurden:
$parser = xml_parser_create();
// Default behaviour: case folding ON → names arrive upper-cased
xml_set_element_handler($parser,
fn($p, $name, $attrs) => print("Start: $name\n"),
fn($p, $name) => null
);
xml_parse($parser, "<note><to>Tove</to></note>", true);
xml_parser_free($parser);Ausgabe:
Start: NOTE
Start: TOSetzen Sie XML_OPTION_CASE_FOLDING auf false, und dieselbe Eingabe behält ihre ursprüngliche Schreibweise (note, to).
Ein vollständiges Beispiel
Die XML-Parser-Erweiterung ist ereignisgesteuert: Es passiert nichts, bis Sie Handler registrieren und ihr Daten übergeben. Dieses Beispiel erstellt einen Parser, setzt zwei Optionen, registriert Start-/End-Handler und parst einen inline XML-String — keine externe Datei erforderlich, sodass Sie es direkt ausführen können:
$parser = xml_parser_create();
// Keep the original tag case instead of upper-casing
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
// Drop elements that contain only whitespace
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, true);
xml_set_element_handler(
$parser,
function ($parser, $name, $attrs) {
echo "Start: $name\n";
},
function ($parser, $name) {
echo "End: $name\n";
}
);
$xml = "<note>\n <to>Tove</to>\n <from>Jani</from>\n</note>";
xml_parse($parser, $xml, true);
xml_parser_free($parser);Ausgabe:
Start: note
Start: to
End: to
Start: from
End: from
End: noteDa Case Folding deaktiviert ist, behalten die Tag-Namen ihre Kleinschreibung. Der Aufruf von xml_set_element_handler() ermöglicht es xml_parse(), diese Ereignisse auszulösen; ohne registrierte Handler würde der Parser das Dokument lesen, aber keine Ausgabe erzeugen. Rufen Sie immer xml_parser_free() auf, wenn Sie fertig sind, um den Parser freizugeben.
Wann man es verwenden sollte
Verwenden Sie xml_parser_set_option() nur, wenn Sie bereits mit dem Low-Level-Expat-Parser arbeiten — typischerweise für das Streamen sehr großer XML-Dokumente, bei denen das Laden des gesamten Baums in den Speicher unerwünscht ist. Für die meisten alltäglichen Aufgaben (Konfiguration lesen, API-Antwort verarbeiten) greifen Sie stattdessen auf SimpleXML zurück, das wesentlich einfacher ist und keine dieser Konfiguration benötigt.
Fazit
xml_parser_set_option() konfiguriert den veralteten SAX-Parser — vor allem sein Verhalten bezüglich Case Folding, Leerzeichen und Kodierung. Setzen Sie jede Option bevor Sie xml_parse() aufrufen, registrieren Sie Element-Handler, damit Ereignisse ausgelöst werden, und geben Sie den Parser danach frei. Wenn Sie eine detaillierte, speichereffiziente Verarbeitung benötigen, bietet Ihnen diese Funktion diese Kontrolle; andernfalls sind SimpleXML oder DOM die einfachere Wahl.