Position actuelle: Accueil> Derniers articles> Exemple XML_PARSE utilisé avec XML_SET_ELlement_Handler

Exemple XML_PARSE utilisé avec XML_SET_ELlement_Handler

M66 2025-05-13

Lorsque vous effectuez un développement Web, nous devons souvent traiter les données XML, telles que les réponses de données obtenues à partir d'API tierces, ou d'analyser certains fichiers de configuration. Dans PHP, XML_PARSE et XML_SET_ELlement_Handler, fournissez un moyen axé sur l'événement de traiter les données XML, en particulier pour le traitement des fichiers volumineux ou l'analyse en streaming.

Cet article utilisera un cas pratique pour montrer comment utiliser ces deux fonctions pour analyser le contenu XML et extraire les données dont nous avons besoin.

1. Introduction aux concepts de base

Il existe de nombreuses façons de traiter XML dans PHP, comme l'utilisation de SimplexML , DomDocument , XMLReader , etc. Mais XML_PARSE est une méthode d'analyse basée sur des événements, également appelée l'analyseur SAX (API simple pour XML). Cette méthode d'analyse est idéale pour gérer le XML de grand volume car il ne nécessite pas que l'ensemble du XML soit chargé en mémoire.

Fonction de base:

2. Un cas pratique: analyser les informations de l'article

Supposons qu'il existe un tel morceau de données XML à partir d'une plate-forme de contenu:

 <?xml version="1.0"?>
<articles>
    <article>
        <title>PHP XMLGuide analytique</title>
        <author>Li Lei</author>
        <url>https://m66.net/articles/php-xml-guide</url>
    </article>
    <article>
        <title>Compréhension approfondie xml_set_element_handler</title>
        <author>Han Meimei</author>
        <url>https://m66.net/articles/xml-handler-deepdive</url>
    </article>
</articles>

Objectif: Nous voulons extraire les titres et les liens de tous les articles et les sauver dans un tableau.

3. Implémentation du code

 <?php

$xmlData = <<<XML
<?xml version="1.0"?>
<articles>
    <article>
        <title>PHP XMLGuide analytique</title>
        <author>Li Lei</author>
        <url>https://m66.net/articles/php-xml-guide</url>
    </article>
    <article>
        <title>Compréhension approfondie 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 = [];

// Définissez le processeur de start TAG
function startElement($parser, $name, $attrs) {
    global $currentTag;
    $currentTag = strtolower($name);
}

// Définissez le processeur de balise finale
function endElement($parser, $name) {
    global $currentTag, $currentArticle, $articles;
    
    if (strtolower($name) == 'article') {
        $articles[] = $currentArticle;
        $currentArticle = [];
    }
    $currentTag = "";
}

// Définir le processeur de données de caractère
function characterData($parser, $data) {
    global $currentTag, $currentArticle;

    $data = trim($data);
    if ($data === '') return;

    if (in_array($currentTag, ['title', 'author', 'url'])) {
        $currentArticle[$currentTag] = $data;
    }
}

// Configuration des fonctions de traitement
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

// Commencer l&#39;analyse
if (!xml_parse($parser, $xmlData, true)) {
    die(sprintf("XML erreur: %s Dans le %d D&#39;ACCORD",
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)));
}

xml_parser_free($parser);

// Résultats de l&#39;analyse de sortie
echo "<pre>";
print_r($articles);
echo "</pre>";
?>

4. Résultat de sortie

 Array
(
    [0] => Array
        (
            [title] => PHP XMLGuide analytique
            [author] => Li Lei
            [url] => https://m66.net/articles/php-xml-guide
        )

    [1] => Array
        (
            [title] => Compréhension approfondie xml_set_element_handler
            [author] => Han Meimei
            [url] => https://m66.net/articles/xml-handler-deepdive
        )
)

5. Résumé

Dans ce cas, nous pouvons voir que XML_PARSE et XML_SET_ELlement_Handler peuvent nous permettre de traiter chaque contenu de balise et texte selon les besoins. Bien que cette méthode soit légèrement plus complexe que simplexml , ses avantages apparaissent lorsque le fichier XML est très grand ou provient d'un flux de réseau.

Applicable aux scénarios suivants:

  • Traitement sensible à la mémoire des grands fichiers XML;

  • Parse Data XML dans les flux de réseau en temps réel;

  • Scénarios où un contrôle fin personnalisé des balises XML est nécessaire.

Si vous construisez un système qui doit faire face à des structures XML complexes, il est recommandé d'essayer cette méthode d'analyse de saxophone, qui est souvent plus efficace et contrôlable que vous ne le pensez.