En PHP, le traitement des données XML est l'une des tâches courantes. PHP fournit une variété de façons de traiter XML, parmi lesquels XML_PARSE et XML_PARSER_CREATE sont deux fonctions couramment utilisées. Ces fonctions fournissent une méthode d'analyse axée sur les événements, de sorte que les performances et l'efficacité peuvent être mieux garanties lors du traitement de grandes quantités de données XML.
Dans cet article, nous expliquerons comment utiliser XML_PARSE et XML_PARSER_CREATE pour créer un analyseur XML personnalisé et traiter correctement les données XML rencontrées lors de l'analyse.
XML_PARSER_CREATE : Cette fonction est utilisée pour créer un analyseur XML et renvoyer une ressource d'analyseur. Grâce à cet analyseur, PHP peut progressivement analyser les données dans des fichiers ou des chaînes en fonction de la structure XML.
XML_PARSE : Cette fonction est utilisée pour traiter les analyseurs créés par XML_PARSER_CREATE et analyser les données XML entrantes. Il peut analyser le contenu XML étape par étape et déclencher des événements liés (par exemple, lorsqu'une balise démarre, se termine ou que les nœuds de texte sont rencontrés).
xml_parser_create([encoding]);
xml_parse(parser, data[, terminate]);
XML_PARSER_CREATE Lors de la création d'un analyseur, vous pouvez choisir de spécifier le codage (par exemple: UTF-8 , ISO-8859-1 , etc.).
XML_PARSE est utilisé pour analyser les données. Chaque fois qu'il analyse, il traite un bloc de données XML et le traite via une fonction de rappel.
Dans PHP, nous pouvons utiliser XML_PARSER_CREATE pour créer un analyseur personnalisé et gérer différents événements pendant le processus d'analyse en définissant différentes fonctions de rappel. Par exemple, nous pouvons configurer une fonction de rappel pour gérer la balise de démarrage, la balise de fin, le contenu du texte, etc.
<?php
// Fonction de rappel personnalisée
function startElementHandler($parser, $name, $attrs) {
echo "Tag de démarrage: $name\n";
// Propriétés de l'étiquette d'impression
if (!empty($attrs)) {
echo "Propriétés de balises: " . print_r($attrs, true) . "\n";
}
}
function endElementHandler($parser, $name) {
echo "Étiquette de fin: $name\n";
}
function characterDataHandler($parser, $data) {
echo "Données texte: $data\n";
}
// créer XML Analyseur
$parser = xml_parser_create('UTF-8');
// Définir la fonction de rappel
xml_set_element_handler($parser, "startElementHandler", "endElementHandler");
xml_set_character_data_handler($parser, "characterDataHandler");
// Exemple XML données
$xml_data = '<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">PHP for Beginners</title>
<author>John Doe</author>
<price>29.95</price>
</book>
<book>
<title lang="es">PHP para Principiantes</title>
<author>Juan Pérez</author>
<price>25.95</price>
</book>
</bookstore>';
// Analyse XML données
if (!xml_parse($parser, $xml_data)) {
echo "XML Analyse错误: " . xml_error_string(xml_get_error_code($parser)) . "\n";
} else {
echo "XML donnéesAnalyse成功\n";
}
// 释放Analyseur资源
xml_parser_free($parser);
?>
xml_set_element_handler définit les fonctions de rappel pour la balise de démarrage et la balise de fin, à savoir startElementHandler et EndementHandler respectivement.
XML_SET_CHARACTER_DATA_HANDLER Définit la fonction de rappel CaracterDatahandler qui gère les données texte.
Lors de l'analyse des données XML, la fonction de rappel est déclenchée pendant l'analyse, gérant différents événements XML.
Tag de démarrage: bookstore
Tag de démarrage: book
Tag de démarrage: title
Propriétés de balises: Array
(
[lang] => en
)
Données texte: PHP for Beginners
Étiquette de fin: title
Tag de démarrage: author
Données texte: John Doe
Étiquette de fin: author
Tag de démarrage: price
Données texte: 29.95
Étiquette de fin: price
Étiquette de fin: book
Tag de démarrage: book
Tag de démarrage: title
Propriétés de balises: Array
(
[lang] => es
)
Données texte: PHP para Principiantes
Étiquette de fin: title
Tag de démarrage: author
Données texte: Juan Pérez
Étiquette de fin: author
Tag de démarrage: price
Données texte: 25.95
Étiquette de fin: price
Étiquette de fin: book
Étiquette de fin: bookstore
XML donnéesAnalyse成功
Lors du traitement des données XML, il est parfois nécessaire d'analyser les données contenant des URL. Pendant l'analyse, vous pouvez rencontrer des données XML similaires à ce qui suit:
<links>
<link>http://m66.net/page1</link>
<link>http://m66.net/page2</link>
</links>
Si nous voulons obtenir et traiter ces URL pendant l'analyse, nous pouvons extraire et manipuler ces liens via une fonction de rappel personnalisée.
<?php
// Fonction de rappel personnalisée
function startElementHandler($parser, $name, $attrs) {
echo "Tag de démarrage: $name\n";
}
function endElementHandler($parser, $name) {
echo "Étiquette de fin: $name\n";
}
function characterDataHandler($parser, $data) {
// Vérifiez si c'est URL
if (filter_var($data, FILTER_VALIDATE_URL)) {
echo "Efficace URL: $data\n";
} else {
echo "Données texte: $data\n";
}
}
// créer XML Analyseur
$parser = xml_parser_create('UTF-8');
// Définir la fonction de rappel
xml_set_element_handler($parser, "startElementHandler", "endElementHandler");
xml_set_character_data_handler($parser, "characterDataHandler");
// Exemple XML données
$xml_data = '<?xml version="1.0" encoding="UTF-8"?>
<links>
<link>http://m66.net/page1</link>
<link>http://m66.net/page2</link>
</links>';
// Analyse XML données
if (!xml_parse($parser, $xml_data)) {
echo "XML Analyse错误: " . xml_error_string(xml_get_error_code($parser)) . "\n";
} else {
echo "XML donnéesAnalyse成功\n";
}
// 释放Analyseur资源
xml_parser_free($parser);
?>
Tag de démarrage: links
Tag de démarrage: link
Efficace URL: http://m66.net/page1
Étiquette de fin: link
Tag de démarrage: link
Efficace URL: http://m66.net/page2
Étiquette de fin: link
Étiquette de fin: links
XML donnéesAnalyse成功
Avec XML_PARSER_CREATE et XML_PARSE , nous pouvons analyser les données XML de manière très flexible et personnaliser les fonctions de rappel pour gérer divers événements pendant l'analyse. En combinant ces fonctions, nous pouvons traiter diverses données dans XML en fonction des besoins réels, y compris des URL, des attributs de balises, des données de texte, etc.
En utilisant des fonctions de rappel personnalisées, nous pouvons traiter différents éléments XML et texte, ce qui rend le processus d'analyse plus opérationnel et plus flexible. Cette méthode d'analyse axée sur l'événement convient particulièrement aux scénarios d'application qui nécessitent le traitement des données XML à grande échelle.
Espérons que ce tutoriel vous aidera à mieux comprendre comment utiliser XML_PARSE et XML_PARSER_CREATE en PHP pour créer des analyseurs XML personnalisés et des données XML de traitement.