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:

<from>Jani</from>

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:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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

<?php
//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:

-- Notiz --
An: Tove
Von: Jani
Überschrift: Erinnerung
Nachricht: Vergiss mich dieses Wochenende nicht!

So funktioniert es:

  1. XML-Parser mit der Funktion xml_parser_create() initialisieren
  2. Funktionen erstellen, die mit verschiedenen Event-Handlern arbeiten
  3. 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
  4. Fügen Sie die Funktion xml_set_character_data_handler() hinzu, um festzulegen, welche Funktion ausgeführt werden soll, wenn der Parser Zeichendaten findet
  5. Die Datei "test.xml" mit der Funktion xml_parse() parsen
  6. Im Fehlerfall fügen Sie die Funktion xml_error_string() hinzu, um einen XML-Fehler in eine Textbeschreibung umzuwandeln
  7. 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。

Weitere Erweiterungen