Aktueller Standort: Startseite> Neueste Artikel> Extrahieren und analysieren Sie Attribute und Textinhalte in XML über XML_Parse

Extrahieren und analysieren Sie Attribute und Textinhalte in XML über XML_Parse

M66 2025-04-24

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.

1. Bereiten Sie XML -Daten vor

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.

2. Verwenden Sie XML_Parse, um XML 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.

Beispielcode:

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

?>

3. Beispiel für Analyseergebnisse

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

4. Zusammenfassung

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.