PHP XML Expat Parser
Der integrierte Expat-Parser ermöglicht die Verarbeitung von XML-Dokumenten in PHP.
Was ist XML?
XML wird verwendet, um Daten zu beschreiben, und sein Fokus liegt darauf, was Daten sind. Eine XML-Datei beschreibt die Struktur der Daten.
In XML gibt es keine vordefinierten Tags. Sie müssen Ihre eigenen Tags definieren.
Um mehr über XML zu erfahren, besuchen Sie bitte unserXML-Tutorial。
Was ist Expat?
Um ein XML-Dokument zu lesen und zu aktualisieren - zu erstellen und zu verarbeiten - benötigen Sie einen XML-Parser.
Es gibt zwei grundlegende Arten von XML-Parsern:
- Baumbasierte Parser: Diese Art von Parser konvertiert ein XML-Dokument in eine Baumstruktur. Er analysiert das gesamte Dokument und bietet Zugriff auf die Elemente im Baum, wie das Document Object Model (DOM).
- Ereignisbasierte Parser: Sie behandeln ein XML-Dokument als eine Reihe von Ereignissen. Wenn ein bestimmtes Ereignis auftritt, ruft der Parser eine Funktion auf, um es zu behandeln.
Der Expat-Parser ist ein ereignisbasierter Parser.
Ereignisbasierte Parser konzentrieren sich auf den Inhalt des XML-Dokuments, nicht auf seine Struktur. Aus diesem Grund können ereignisbasierte Parser schneller auf Daten zugreifen als baumbasierte Parser.
Betrachten Sie das folgende XML-Fragment:
Der ereignisbasierte Parser meldet das obige XML als eine Reihe von drei Ereignissen:
- Startelement: from
- CDATA-Abschnitt starten, Wert: Jani
- Endelement: from
Das obige XML-Beispiel enthält wohlgeformtes XML. Dieses Beispiel ist jedoch ungültiges XML, weil keine Dokumenttypdeklaration (DTD) damit verknüpft ist.
Wenn jedoch der Expat-Parser verwendet wird, macht das keinen Unterschied. Expat ist ein nicht validierender Parser, der jede DTD ignoriert.
Als ereignisbasierter, nicht validierender XML-Parser ist Expat schnell und leichtgewichtig, was ihn sehr geeignet für PHP-Webanwendungen macht.
Hinweis:XML-Dokumente müssen wohlgeformt sein, andernfalls erzeugt Expat einen Fehler.
Installation
Die XML-Expat-Parser-Funktionen sind Teil des PHP-Kerns. Sie können diese Funktionen ohne Installation verwenden.
XML-Datei
Die folgende XML-Datei wird in unserem Beispiel verwendet:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Erinnerung</heading>
<body>Vergiss mich dieses Wochenende nicht!</body>
</note>
XML-Parser initialisieren
Wir werden den XML-Parser in PHP initialisieren, Handler für verschiedene XML-Ereignisse definieren und dann die XML-Datei parsen.
Beispiel
//XML-Parser initialisieren
$parser=xml_parser_create();
//Funktion, die am Anfang eines Elements verwendet wird
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "NOTE":
echo "-- Note --<br>";
break;
case "TO":
echo "To: ";
break;
case "FROM":
echo "Von: ";
break;
case "HEADING":
echo "Überschrift: ";
break;
case "BODY":
echo "Nachricht: ";
}
}
//Funktion, die am Ende eines Elements verwendet wird
function stop($parser,$element_name)
{
echo "<br>";
}
//Funktion, die beim Finden von Zeichendaten verwendet werden soll
function char($parser,$data)
{
echo $data;
}
//Element-Handler angeben
xml_set_element_handler($parser,"start","stop");
//Daten-Handler angeben
xml_set_character_data_handler($parser,"char");
//XML-Datei öffnen
$fp=fopen("test.xml","r");
//Daten lesen
while ($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)));
}
//XML-Parser freigeben
xml_parser_free($parser);
?>
Der obige Code gibt Folgendes aus:
An: Tove
Von: Jani
Überschrift: Erinnerung
Nachricht: Vergiss mich dieses Wochenende nicht!
So funktioniert es:
- XML-Parser mit der Funktion xml_parser_create() initialisieren
- Funktionen erstellen, die mit verschiedenen Event-Handlern arbeiten
- Fügen Sie die Funktion xml_set_element_handler() hinzu, um festzulegen, welche Funktion ausgeführt werden soll, wenn der Parser Start- und End-Tags findet
- Fügen Sie die Funktion xml_set_character_data_handler() hinzu, um festzulegen, welche Funktion ausgeführt werden soll, wenn der Parser Zeichendaten findet
- Die Datei "test.xml" mit der Funktion xml_parse() parsen
- Im Fehlerfall fügen Sie die Funktion xml_error_string() hinzu, um einen XML-Fehler in eine Textbeschreibung umzuwandeln
- Rufen Sie die Funktion xml_parser_free() auf, um den von der Funktion xml_parser_create() belegten Speicher freizugeben
Weitere Informationen über PHP Expat Parser
Weitere Informationen über PHP Expat-Funktionen finden Sie in unseremPHP XML Parser Reference Manual。