Position actuelle: Accueil> Derniers articles> Extraire et analyser les attributs et le contenu texte dans XML via XML_PARSE

Extraire et analyser les attributs et le contenu texte dans XML via XML_PARSE

M66 2025-04-24

Lors du traitement des données XML, PHP fournit des outils puissants, dont l'un est la fonction XML_PARSE () , qui appartient à l'analyseur XML de PHP (basé sur Expat). Cet article présentera comment utiliser cette fonction pour analyser les fichiers XML et extraire les valeurs d'attribut et le contenu texte.

1. Préparer les données XML

Supposons que nous ayons le fichier XML suivant nommé Sample.xml :

 <?xml version="1.0" encoding="UTF-8"?>
<articles>
    <article id="101" author="Alice">
        <title>PHP XMLTutoriel d&#39;analyse</title>
        <url>https://m66.net/articles/php-xml</url>
    </article>
    <article id="102" author="Bob">
        <title>Compréhension approfondieDOMDocument</title>
        <url>https://m66.net/articles/domdocument</url>
    </article>
</articles>

Notre objectif est d'analyser l'identifiant , les attributs d'auteur , ainsi que son titre et ses liens pour chaque article.

2. Utilisez XML_Parse pour analyser XML

xml_parse () est une fonction d'analyse XML de bas niveau. Lorsque vous l'utilisez, vous devez combiner xml_set_element_handler () et xml_set_character_data_handler () .

Exemple de code:

 <?php

$xml = file_get_contents('sample.xml');

$parser = xml_parser_create("UTF-8");

// Stocker le nom de l&#39;élément actuel
$currentTag = '';
// Stocker les données de l&#39;article
$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') {
        // Initialiser un nouvel article
        $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;
    }
}

// Commencer l&#39;analyse
if (!xml_parse($parser, $xml, true)) {
    die("XML Error: " . xml_error_string(xml_get_error_code($parser)));
}

xml_parser_free($parser);

// Résultats de l&#39;analyse de sortie
foreach ($articles as $article) {
    echo "article ID: " . $article['id'] . PHP_EOL;
    echo "auteur: " . $article['author'] . PHP_EOL;
    echo "titre: " . $article['title'] . PHP_EOL;
    echo "Lien: " . $article['url'] . PHP_EOL;
    echo str_repeat('-', 40) . PHP_EOL;
}

?>

3. Exemple de résultats d'analyse

Après avoir exécuté le code ci-dessus, la sortie sera:

 article ID: 101
auteur: Alice
titre: PHP XMLTutoriel d&#39;analyse
Lien: https://m66.net/articles/php-xml
----------------------------------------
article ID: 102
auteur: Bob
titre: Compréhension approfondieDOMDocument
Lien: https://m66.net/articles/domdocument
----------------------------------------

4. Résumé

XML_PARSE () fournit un traitement axé sur les événements des flux de données XML, qui est très adapté à la gestion des fichiers volumineux ou des tâches d'analyse en temps réel. Bien qu'il ne soit pas aussi intuitif que DOM ou simplexml, il est très efficace et convient aux applications sensibles à la mémoire.

Dans le développement réel, si la structure du fichier XML est complexe ou doit être flexible, vous pouvez envisager d'utiliser DOMDocument ou simplexml . Mais lorsque vous devez contrôler soigneusement le processus d'analyse ou avoir des exigences de performances extrêmes, xml_parse () est sans aucun doute un outil à considérer.