Der integrierte Expat-Parser ermöglicht die Verarbeitung von XML-Dokumenten in PHP.
XML wird zur Beschreibung von Daten verwendet, wobei der Schwerpunkt auf den Daten liegt. XML-Dateien beschreiben die Struktur von Daten.
In XML gibt es keine vordefinierten Tags. Sie müssen Ihre eigenen Tags definieren.
Um mehr über XML zu erfahren, besuchen Sie unser XML-Tutorial.
Um ein XML-Dokument zu lesen und zu aktualisieren, also zu erstellen und zu verarbeiten, benötigen Sie einen XML-Parser.
Es gibt zwei grundlegende Arten von XML-Parsern:
Baumbasierter Parser: Dieser Parser wandelt XML-Dokumente in eine Baumstruktur um. Es analysiert das gesamte Dokument und bietet Zugriff auf Elemente in der Baumstruktur, beispielsweise das Document Object Model (DOM).
Ereignisbasierter Parser: Behandelt ein XML-Dokument als eine Reihe von Ereignissen. Wenn ein bestimmtes Ereignis auftritt, ruft der Parser eine Funktion auf, um es zu verarbeiten.
Der Expat-Parser ist ein ereignisbasierter Parser.
Ereignisbasierte Parser konzentrieren sich auf den Inhalt von XML-Dokumenten und nicht auf deren Struktur. Aus diesem Grund können ereignisbasierte Parser schneller auf Daten zugreifen als baumbasierte Parser.
Bitte sehen Sie sich das folgende XML-Fragment an:
<von>Jani</von>
Der ereignisbasierte Parser meldet das obige XML als eine Folge von drei Ereignissen:
Startelement: von
Starten Sie den CDATA-Abschnitt, Wert: Jani
Schließendes Element: von
Das obige XML-Beispiel enthält wohlgeformtes XML. Diese Instanz ist jedoch ungültiges XML, da ihr keine Dokumenttypdeklaration (Document Type Declaration, DTD) zugeordnet ist.
Bei Verwendung des Expat-Parsers macht dies jedoch keinen Unterschied. Expat ist ein Parser, der die Gültigkeit nicht prüft und jegliche DTD ignoriert.
Als ereignisbasierter, nicht validierter XML-Parser ist Expat schnell und leichtgewichtig und daher ideal für PHP-Webanwendungen.
Hinweis: Das XML-Dokument muss wohlgeformt sein, sonst generiert Expat einen Fehler.
Die XML-Expat-Parser-Funktion ist ein integraler Bestandteil des PHP-Kerns. Für die Nutzung dieser Funktionen ist keine Installation erforderlich.
In unserem Beispiel wird die folgende XML-Datei verwendet:
<?xml version="1.0" binding="ISO-8859-1"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don Vergiss mich dieses Wochenende nicht!</body></note>
Wir müssen den XML-Parser in PHP initialisieren, Handler für verschiedene XML-Ereignisse definieren und dann die XML-Datei analysieren.
<?php//Initialisieren Sie den XML-Parser$parser=xml_parser_create();//Funktion zur Verwendung am Anfang eines Elementsfunction start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "--Hinweis --<br>"; echo "To:"; break; "HEADING": echo "Heading: "; break; case "BODY": echo "Message: " } }//Funktion zur Verwendung am Ende eines Elements function stop($parser,$element_name) { echo "<br> "; }//Funktion, die beim Suchen von Zeichendaten verwendet werden soll.function char($parser,$data) { echo $data; }//Element angeben handlerxml_set_element_handler($parser,"start","stop");//Daten angeben handlerxml_set_character_data_handler($parser,"char");//XML-Datei öffnen$fp=fopen("test.xml","r");/ /Daten lesenwhile ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser)) }/ /Gibt den XML-Parser freixml_parser_free($parser);?>Der obige Code gibt Folgendes aus:
-- Hinweis --An: ToveVon: JaniÜberschrift: ReminderMessage: Vergiss mich dieses Wochenende nicht!
So funktioniert es:
Initialisieren Sie den XML-Parser über die Funktion xml_parser_create()
Erstellen Sie Funktionen, die mit verschiedenen Event-Handlern arbeiten
Fügen Sie die Funktion xml_set_element_handler() hinzu, um zu definieren, welche Funktion ausgeführt werden soll, wenn der Parser auf die öffnenden und schließenden Tags stößt
Fügen Sie die Funktion xml_set_character_data_handler() hinzu, um zu definieren, welche Funktion ausgeführt werden soll, wenn der Parser auf Zeichendaten stößt
Analysieren Sie die Datei „test.xml“ mit der Funktion xml_parse()
Fügen Sie im Fehlerfall die Funktion xml_error_string() hinzu, um XML-Fehler in Textbeschreibungen umzuwandeln
Rufen Sie die Funktion xml_parser_free() auf, um den der Funktion xml_parser_create() zugewiesenen Speicher freizugeben
Um mehr über die PHP Expat-Funktion zu erfahren, besuchen Sie unser PHP XML Parser-Referenzhandbuch.