Aktueller Standort: Startseite> Neueste Artikel> Beispiel für XML_PARSE

Beispiel für XML_PARSE

M66 2025-05-13

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.

1. Einführung in grundlegende Konzepte

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.

Kernfunktion:

  • 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.

2. Ein praktischer Fall: Analyse der Artikelinformationen

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.

A. Code -Implementierung

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

4. Ausgangsergebnis

 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
        )
)

5. Zusammenfassung

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.