In PHP gibt es viele Möglichkeiten, XML -Daten zu analysieren, z. B. die Verwendung von DOM, Simplexml oder XML -Parser. In diesem Artikel wird vorgestellt, wie die zugrunde liegende Funktion xml_parse () in Verbindung mit dem XML -Parser verwendet wird, um sie zu verarbeiten.
XML_PARSE () ist eine der XML -Erweiterungsfunktionen von PHP, mit der XML -Saiten zum Parsen in den Parsen füttern. Es wird in Kombination mit Funktionen wie xml_parser_create () , xml_set_element_handler () verwendet und eignet sich für die Handhabung von Szenarien, in denen die Etikettenstruktur fein gesteuert werden muss.
Angenommen, Sie haben eine Schnittstelle, die XML dynamisch erzeugt:
https://api.m66.net/data/feed.xml
Sie möchten XML -Daten von dieser Adresse abrufen und den Titel- und Link -Feldern unter dem Tag <Poinction> -Tags analysieren.
<?php
// Initialisierungsparser
$parser = xml_parser_create();
// Arrays zum Speichern von Daten
$parsedData = [];
$currentTag = '';
$currentItem = [];
// Definieren Sie den Start -Tag -Prozessor
function startElement($parser, $name, $attrs) {
global $currentTag, $currentItem;
$currentTag = strtolower($name);
if ($currentTag === 'item') {
$currentItem = [];
}
}
// Definieren Sie den End -Tag -Prozessor
function endElement($parser, $name) {
global $currentTag, $currentItem, $parsedData;
if (strtolower($name) === 'item') {
$parsedData[] = $currentItem;
}
$currentTag = '';
}
// Definieren Sie den Charakterdatenprozessor
function characterData($parser, $data) {
global $currentTag, $currentItem;
$data = trim($data);
if (!$data) return;
if ($currentTag === 'title') {
$currentItem['title'] = (isset($currentItem['title']) ? $currentItem['title'] : '') . $data;
} elseif ($currentTag === 'link') {
$currentItem['link'] = (isset($currentItem['link']) ? $currentItem['link'] : '') . $data;
}
}
// Richten Sie den Prozessor ein
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
// Holen Sie sich von der Fernbedienung XML Inhalt
$url = "https://api.m66.net/data/feed.xml";
$xmlData = file_get_contents($url);
if (!$xmlData) {
die("Nicht in der Lage zu bekommen XML Daten");
}
// 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)));
}
// Parserressourcen freigeben
xml_parser_free($parser);
// Ausgangsergebnis
echo "<pre>";
print_r($parsedData);
echo "</pre>";
?>
Array
(
[0] => Array
(
[title] => Beispieltitel1
[link] => https://www.m66.net/item/123
)
[1] => Array
(
[title] => Beispieltitel2
[link] => https://www.m66.net/item/456
)
)
Verwenden Sie XML_PARSE () , um die vollständige Kontrolle über XML-Datenstrukturen bereitzustellen, und eignet sich für komplexe oder nicht standardmäßige Struktur-XML-Dateien. Obwohl es nicht so präzise wie simplexml ist, ist es sehr nützlich für Szenarien, in denen benutzerdefinierter Verarbeitungsfluss erforderlich ist.