Bei der Webentwicklung müssen wir häufig XML-Daten verarbeiten, z. B. Datenantworten, die von APIs von Drittanbietern erhalten oder bestimmte Konfigurationsdateien analysiert werden. In PHP bieten XML_PARSE und XML_SET_ELEMENT_HANDLER eine ereignisgesteuerte Methode zur Verarbeitung von XML-Daten, insbesondere für die Verarbeitung großer Dateien oder zum Streaming-Parsing.
In diesem Artikel wird ein praktischer Fall verwendet, um zu demonstrieren, wie diese beiden Funktionen verwendet werden, um XML -Inhalte zu analysieren und die von uns benötigten Daten zu extrahieren.
Es gibt viele Möglichkeiten, XML in PHP zu verarbeiten, z. B. die Verwendung von Simplexml , Domdocument , XMLReader usw., aber XML_PARSE ist eine ereignisbasierte Parsingmethode, die auch als SAX (Simple API für XML) als Parser bezeichnet wird. Diese Parsing -Methode eignet sich hervorragend zum Umgang mit großem Volumen -XML, da nicht die gesamte XML in den Speicher geladen werden muss.
xml_parser_create () : Erstellen Sie einen XML -Parser.
xml_set_element_handler () : Legt die Rückruffunktion fest, die die Start- und End -Tags übernimmt.
XML_PARSE () : Start XML.
xml_parser_free () : Parser -Ressourcen veröffentlichen.
Nehmen wir an, dass es eine solche XML -Daten von einer Inhaltsplattform gibt:
<?xml version="1.0"?>
<articles>
<article>
<title>PHP XMLAnalysehandbuch</title>
<author>Li Lei</author>
<url>https://m66.net/articles/php-xml-guide</url>
</article>
<article>
<title>Eingehendes Verständnis xml_set_element_handler</title>
<author>Han Meimei</author>
<url>https://m66.net/articles/xml-handler-deepdive</url>
</article>
</articles>
Ziel: Wir möchten die Titel und Links aller Artikel extrahieren und in einem Array speichern.
<?php
$xmlData = <<<XML
<?xml version="1.0"?>
<articles>
<article>
<title>PHP XMLAnalysehandbuch</title>
<author>Li Lei</author>
<url>https://m66.net/articles/php-xml-guide</url>
</article>
<article>
<title>Eingehendes Verständnis xml_set_element_handler</title>
<author>Han Meimei</author>
<url>https://m66.net/articles/xml-handler-deepdive</url>
</article>
</articles>
XML;
$parser = xml_parser_create("UTF-8");
$articles = [];
$currentTag = "";
$currentArticle = [];
// Definieren Sie den Start -Tag -Prozessor
function startElement($parser, $name, $attrs) {
global $currentTag;
$currentTag = strtolower($name);
}
// Definieren Sie den End -Tag -Prozessor
function endElement($parser, $name) {
global $currentTag, $currentArticle, $articles;
if (strtolower($name) == 'article') {
$articles[] = $currentArticle;
$currentArticle = [];
}
$currentTag = "";
}
// Definieren Sie den Charakterdatenprozessor
function characterData($parser, $data) {
global $currentTag, $currentArticle;
$data = trim($data);
if ($data === '') return;
if (in_array($currentTag, ['title', 'author', 'url'])) {
$currentArticle[$currentTag] = $data;
}
}
// Einrichten von Verarbeitungsfunktionen
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
// Analysieren
if (!xml_parse($parser, $xmlData, true)) {
die(sprintf("XML Fehler: %s Im %d OK",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
// Ausgangsanalyseergebnisse
echo "<pre>";
print_r($articles);
echo "</pre>";
?>
Array
(
[0] => Array
(
[title] => PHP XMLAnalysehandbuch
[author] => Li Lei
[url] => https://m66.net/articles/php-xml-guide
)
[1] => Array
(
[title] => Eingehendes Verständnis xml_set_element_handler
[author] => Han Meimei
[url] => https://m66.net/articles/xml-handler-deepdive
)
)
In diesem Fall können wir sehen, dass XML_PARSE und XML_SET_ELEMENT_HANDLER es uns ermöglichen können, jeden Tag- und Textinhalt nach Bedarf zu verarbeiten. Obwohl diese Methode etwas komplexer ist als simplexml , werden ihre Vorteile angezeigt, wenn die XML -Datei sehr groß ist oder aus einem Netzwerkstrom stammt.
Anwendbar auf die folgenden Szenarien:
Speicherempfindliche Verarbeitung großer XML-Dateien;
XML -Daten in Netzwerkströmen in Echtzeit analysieren;
Szenarien, in denen eine benutzerdefinierte feine Steuerung von XML -Tags erforderlich sind.
Wenn Sie ein System erstellen, das sich mit komplexen XML -Strukturen befassen muss, wird empfohlen, diese SAX -Parsing -Methode auszuprobieren, die häufig effizienter und steuerbarer ist als Sie denken.