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 .
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>
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é.
$parser = xml_parser_create();
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");
$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);
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.
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.