Position actuelle: Accueil> Derniers articles> Comment analyser les documents XML contenant CDATA via XML_PARSE

Comment analyser les documents XML contenant CDATA via XML_PARSE

M66 2025-05-13

Il existe de nombreuses façons de traiter XML dans PHP, parmi lesquels XML_PARSE est une fonction sous-jacente adaptée aux développeurs qui ont des besoins de contrôle plus forts pour les structures XML. Cet article décrira comment utiliser la fonction XML_PARSE pour analyser un document XML contenant une région CDATA .

Qu'est-ce qu'une zone CDATA?

Dans XML, <! [Cdata [...]]> est une directive utilisée pour dire à l'analyseur que le contenu ne doit pas être analysé comme syntaxe XML. Ceci est très utile pour le contenu qui contient des caractères spéciaux, tels que le HTML ou le code de script.

Exemple:

 <note>
  <to>Tom</to>
  <message><![CDATA[Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!]]></message>
</note>

Étapes de base pour analyser XML à l'aide de XML_PARSE

XML_PARSE est une fonction en PHP pour l'analyse de la ligne XML par ligne. Pour l'utiliser pour analyser la région CDATA, vous devez généralement utiliser des fonctions XML_PARSER_CREATE () et du processeur personnalisé.

1. Créer un analyseur

 $parser = xml_parser_create();

2. Définissez la fonction de traitement

Vous devez enregistrer trois fonctions de processeur: la balise de démarrage, la balise finale et le processeur de données de caractères.

 $data = [];

function startElement($parser, $name, $attrs) {
    global $data;
    $data['current'] = $name;
}

function endElement($parser, $name) {
    global $data;
    $data['current'] = null;
}

function characterData($parser, $value) {
    global $data;
    if (!isset($data['values'][$data['current']])) {
        $data['values'][$data['current']] = '';
    }
    $data['values'][$data['current']] .= $value;
}

xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

3. Analyser les données XML

 $xml = <<<XML
<note>
  <to>Tom</to>
  <message><![CDATA[Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!]]></message>
</note>
XML;

if (!xml_parse($parser, $xml, true)) {
    die(sprintf("XML Error: %s at line %d",
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)));
}
xml_parser_free($parser);

4. Résultat de sortie

 print_r($data['values']);

La sortie sera:

 Array
(
    [TO] => Tom
    [MESSAGE] => Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!
)

Remarque: Tous les noms de balises seront convertis en capitalisation.

résumé

XML_PARSE est une méthode d'analyse XML dirigée par des événements adaptée au traitement des données XML complexes ou à grand volume. Pour les cas où CDATA est inclus, il vous suffit de configurer le processeur de caractères pour capturer son contenu normalement. Bien qu'il soit plus complexe à utiliser que DOM ou simplexml, il présente certains avantages en performances et en flexibilité.

Si votre projet nécessite une efficacité d'analyse élevée ou doit personnaliser le traitement des événements dans XML, XML_PARSE sera un bon choix.