Position actuelle: Accueil> Derniers articles> Utilisez XML_Parse pour analyser les données XML générées dynamiquement

Utilisez XML_Parse pour analyser les données XML générées dynamiquement

M66 2025-05-11

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.

Qu'est-ce que xml_parse () ?

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.

Exemple de scénario: obtenir des données XML à partir d'une adresse distante

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> .

Exemple de code

 <?php

// Analyseur d&#39;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&#39;obtenir XML données");
}

// 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)));
}

// Libérer les ressources de l&#39;analyseur
xml_parser_free($parser);

// Résultat de sortie
echo "<pre>";
print_r($parsedData);
echo "</pre>";
?>

Exemple de sortie

 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
        )
)

résumé

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.