En PHP, il existe de nombreuses façons d'analyser les données XML, comme l'utilisation de l'analyseur DOM, simplexml ou XML. Cet article présentera comment utiliser la fonction XML_PARSE () sous-jacente en conjonction avec l'analyseur XML pour le gérer.
XML_PARSE () est l'une des fonctions d'extension XML de PHP, qui est utilisée pour alimenter les chaînes XML dans l'analyseur pour l'analyse. Il est utilisé en combinaison avec des fonctions telles que xml_parser_create () , xml_set_element_handler () , et convient à la gestion des scénarios où la structure d'étiquette doit être finement contrôlée.
Supposons que vous ayez une interface qui génère du XML dynamiquement:
https://api.m66.net/data/feed.xml
Vous souhaitez obtenir des données XML à partir de cette adresse et analyser les champs de titre et de liaison sous la balise <élément> .
<?php
// Analyseur d'initialisation
$parser = xml_parser_create();
// Tableaux pour stocker les données
$parsedData = [];
$currentTag = '';
$currentItem = [];
// Définissez le processeur de start TAG
function startElement($parser, $name, $attrs) {
global $currentTag, $currentItem;
$currentTag = strtolower($name);
if ($currentTag === 'item') {
$currentItem = [];
}
}
// Définissez le processeur de balise finale
function endElement($parser, $name) {
global $currentTag, $currentItem, $parsedData;
if (strtolower($name) === 'item') {
$parsedData[] = $currentItem;
}
$currentTag = '';
}
// Définir le processeur de données de caractère
function characterData($parser, $data) {
global $currentTag, $currentItem;
$data = trim($data);
if (!$data) return;
if ($currentTag === 'title') {
$currentItem['title'] = (isset($currentItem['title']) ? $currentItem['title'] : '') . $data;
} elseif ($currentTag === 'link') {
$currentItem['link'] = (isset($currentItem['link']) ? $currentItem['link'] : '') . $data;
}
}
// Configurer le processeur
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
// Sortez de la distance XML contenu
$url = "https://api.m66.net/data/feed.xml";
$xmlData = file_get_contents($url);
if (!$xmlData) {
die("Incapable d'obtenir XML données");
}
// Commencer l'analyse
if (!xml_parse($parser, $xmlData, true)) {
die(sprintf("XML erreur: %s Dans le %d D'ACCORD",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
// Libérer les ressources de l'analyseur
xml_parser_free($parser);
// Résultat de sortie
echo "<pre>";
print_r($parsedData);
echo "</pre>";
?>
Array
(
[0] => Array
(
[title] => Exemple de titre1
[link] => https://www.m66.net/item/123
)
[1] => Array
(
[title] => Exemple de titre2
[link] => https://www.m66.net/item/456
)
)
Utilisez XML_Parse () pour fournir un contrôle complet sur les structures de données XML et convient aux fichiers XML de structure complexe ou non standard. Bien qu'il ne soit pas aussi concis que simplexml, il est très utile pour les scénarios où un flux de traitement personnalisé est requis.