Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie XML_Parse, um dynamisch generierte XML -Daten zu analysieren

Verwenden Sie XML_Parse, um dynamisch generierte XML -Daten zu analysieren

M66 2025-05-11

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.

Was ist xml_parse () ?

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.

Beispielszenario: Holen Sie sich XML -Daten aus einer Remote -Adresse

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.

Beispielcode

 <?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>";
?>

Ausgangsbeispiel

 Array
(
    [0] => Array
        (
            [title] => Beispieltitel1
            [link] => https://www.m66.net/item/123
        )
    [1] => Array
        (
            [title] => Beispieltitel2
            [link] => https://www.m66.net/item/456
        )
)

Zusammenfassung

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.