Bei der Verarbeitung von XML -Daten liefert PHP einige leistungsstarke Tools, von denen eine die Funktion xml_parse () ist, die zum XML -Parser von PHP gehört (basierend auf Expat). In diesem Artikel wird vorgestellt, wie Sie diese Funktion verwenden, um XML -Dateien zu analysieren und Attributwerte und Textinhalte zu extrahieren.
Angenommen, wir haben die folgende XML -Datei mit dem Namen sample.xml :
<?xml version="1.0" encoding="UTF-8"?>
<articles>
<article id="101" author="Alice">
<title>PHP XMLAnalyse -Tutorial</title>
<url>https://m66.net/articles/php-xml</url>
</article>
<article id="102" author="Bob">
<title>Eingehendes VerständnisDOMDocument</title>
<url>https://m66.net/articles/domdocument</url>
</article>
</articles>
Unser Ziel ist es, die ID , die Autorenattribute sowie den Titel und ihre Links für jeden Artikel zu analysieren.
xml_parse () ist eine XML-Parsingfunktion mit niedrigem Niveau. Bei der Verwendung müssen Sie xml_set_element_handler () und xml_set_character_data_handler () kombinieren.
<?php
$xml = file_get_contents('sample.xml');
$parser = xml_parser_create("UTF-8");
// Speichern Sie den aktuellen Elementnamen
$currentTag = '';
// Artikeldaten speichern
$articles = [];
$currentArticle = [];
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
function startElement($parser, $name, $attrs) {
global $currentTag, $currentArticle, $articles;
$currentTag = strtolower($name);
if ($currentTag === 'article') {
// Initialisieren Sie einen neuen Artikel
$currentArticle = [
'id' => $attrs['ID'] ?? '',
'author' => $attrs['AUTHOR'] ?? '',
'title' => '',
'url' => ''
];
}
}
function endElement($parser, $name) {
global $currentTag, $currentArticle, $articles;
if (strtolower($name) === 'article') {
$articles[] = $currentArticle;
}
$currentTag = '';
}
function characterData($parser, $data) {
global $currentTag, $currentArticle;
$data = trim($data);
if (!$data) return;
if ($currentTag === 'title') {
$currentArticle['title'] .= $data;
} elseif ($currentTag === 'url') {
$currentArticle['url'] .= $data;
}
}
// Analysieren
if (!xml_parse($parser, $xml, true)) {
die("XML Error: " . xml_error_string(xml_get_error_code($parser)));
}
xml_parser_free($parser);
// Ausgangsanalyseergebnisse
foreach ($articles as $article) {
echo "Artikel ID: " . $article['id'] . PHP_EOL;
echo "Autor: " . $article['author'] . PHP_EOL;
echo "Titel: " . $article['title'] . PHP_EOL;
echo "Link: " . $article['url'] . PHP_EOL;
echo str_repeat('-', 40) . PHP_EOL;
}
?>
Nach dem Ausführen des obigen Codes ist die Ausgabe:
Artikel ID: 101
Autor: Alice
Titel: PHP XMLAnalyse -Tutorial
Link: https://m66.net/articles/php-xml
----------------------------------------
Artikel ID: 102
Autor: Bob
Titel: Eingehendes VerständnisDOMDocument
Link: https://m66.net/articles/domdocument
----------------------------------------
XML_PARSE () bietet eine ereignisgesteuerte Verarbeitung von XML-Datenströmen, die sehr geeignet ist, um große Dateien oder Echtzeit-Parsingaufgaben zu bearbeiten. Obwohl es nicht so intuitiv ist wie DOM oder SimplexML, ist es sehr analysiert und ist für speicherempfindliche Anwendungen geeignet.
Wenn die XML -Dateistruktur in der tatsächlichen Entwicklung komplex ist oder flexibel ist, können Sie Domdocument oder Simplexml verwenden. Wenn Sie jedoch den Analyseprozess sorgfältig steuern oder extreme Leistungsanforderungen haben, ist XML_PARSE () zweifellos ein in Betracht gezogener Werkzeug.