xml_parse()
Was ist xml_parse()?
Die xml_parse()-Funktion ist eine integrierte PHP-Funktion, die XML-Daten parst. Sie gehört zur XML-Parser-Erweiterung von PHP und implementiert einen Streaming-Parser im SAX-Stil (Simple API for XML). Im Gegensatz zu baumbasierten Parsern verarbeitet sie XML sequenziell und löst Callback-Funktionen aus, sobald sie auf Elemente, Attribute und Zeichendaten trifft. Dies macht sie äußerst effizient für das Parsen großer XML-Dateien, ohne das gesamte Dokument in den Speicher laden zu müssen.
Die xml_parse()-Funktion ist nützlich, wenn Sie XML-Daten in PHP parsen müssen, beispielsweise um Daten aus einer XML-Datei zu extrahieren, XML-Daten in ein anderes Format zu transformieren oder XML-Streams in Echtzeit zu verarbeiten.
Syntax
Die Syntax der xml_parse()-Funktion lautet wie folgt:
xml_parse($parser, $data, $is_final = false)Wobei $parser die vom XML-Parser-Initialisierungsfunktion zurückgegebene Parser-Ressource ist, z. B. xml_parser_create(), $data die zu parsenden XML-Daten sind und $is_final ein optionaler Parameter ist, der angibt, ob die angegebenen $data das letzte zu parsende Datenstück sind.
Anwendungsbeispiele
Werfen wir einen Blick auf einige praktische Beispiele zur Verwendung von xml_parse() in PHP.
Beispiel 1: Parsen von XML-Daten
Angenommen, Sie haben eine XML-Datei "data.xml", die Sie mit der XML-Parser-Erweiterung von PHP parsen möchten. Sie können die xml_parse()-Funktion verwenden, um die XML-Daten wie folgt zu parsen:
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
$xml_data = file_get_contents("data.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
$error_message = xml_error_string(xml_get_error_code($xml_parser));
$error_line = xml_get_current_line_number($xml_parser);
echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);Dieser Code erstellt einen XML-Parser mit xml_parser_create() und deaktiviert eine Option zur Groß-/Kleinschreibung (Case Folding). Anschließend wird die XML-Datei "data.xml" eingelesen und der Inhalt in der Variable $xml_data gespeichert. Mit xml_parse() werden die XML-Daten geparst und anhand des Rückgabewerts von xml_parse() geprüft, ob während des Parsing-Vorgangs ein Fehler aufgetreten ist. Tritt ein Fehler auf, wird der Fehlercode mit xml_get_error_code() und die Fehlermeldung mit xml_error_string() abgerufen und eine Fehlermeldung in der Konsole ausgegeben, die die Fehlermeldung sowie die Zeilennummer des Fehlers enthält. Abschließend wird der vom XML-Parser belegte Speicher mit xml_parser_free() freigegeben.
Beispiel 2: Parsen von XML mit Event-Handlern
Die xml_parse()-Funktion wurde entwickelt, um mit Event-Handlern zu arbeiten. Durch das Registrieren von Callback-Funktionen können Sie XML-Elemente und -Daten verarbeiten, sobald sie während des Streams aufgerufen werden.
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
// Define handler functions
function startElement($parser, $name, $attrs) {
echo "Start element: $name\n";
}
function endElement($parser, $name) {
echo "End element: $name\n";
}
function characterData($parser, $data) {
echo "Data: $data\n";
}
// Set handlers
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$xml_data = file_get_contents("data.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
$error_message = xml_error_string(xml_get_error_code($xml_parser));
$error_line = xml_get_current_line_number($xml_parser);
echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);Dieser Code erstellt einen XML-Parser mit xml_parser_create() und deaktiviert eine Option zur Groß-/Kleinschreibung. Anschließend werden drei Callback-Funktionen definiert: startElement() für öffnende Tags, endElement() für schließende Tags und characterData() für Textinhalte. Diese Handler werden mit xml_set_element_handler() und xml_set_character_data_handler() registriert.
Das Skript liest "data.xml" ein und übergibt es an xml_parse(). Während der Parser durch den XML-Stream läuft, ruft er automatisch die registrierten Handler auf. Tritt während des Parsens ein Fehler auf, werden der Fehlercode und die Fehlermeldung mit xml_get_error_code() und xml_error_string() abgerufen und eine beschreibende Fehlerausgabe erzeugt. Abschließend wird der Parser-Speicher mit xml_parser_free() freigegeben.
Fazit
In diesem Artikel haben wir die PHP-Funktion xml_parse() und deren Verwendung zum Parsen von XML-Daten besprochen. Wir haben erläutert, dass sie zur XML-Parser-Erweiterung (im SAX-Stil) gehört, ihre Syntax behandelt und Beispiele für das grundlegende Parsing sowie die ereignisgesteuerte Implementierung von Handlern bereitgestellt. Anhand dieser Beispiele können Sie XML-Daten effizient parsen, Informationen aus XML-Dateien extrahieren oder große XML-Streams in Ihren PHP-Anwendungen verarbeiten.
Praxis
Was ist der XML-Parser in PHP?