Position actuelle: Accueil> Derniers articles> Combiner XML_Parse et Curl pour télécharger et analyser les données XML

Combiner XML_Parse et Curl pour télécharger et analyser les données XML

M66 2025-05-13

Dans le développement quotidien de PHP, nous devons souvent obtenir des données XML à partir de serveurs distants et l'analyser. Cet article montrera comment utiliser Curl pour télécharger des données XML, puis analyser le contenu en combinaison avec les fonctions de la série XML_PARSE , et la convertir en une structure de tableau disponible.

1. Préparation: activer les extensions requises

Tout d'abord, assurez-vous que les extensions suivantes sont activées dans votre environnement PHP:

  • Curl : Utilisé pour télécharger à distance les données

  • Parser XML : utilisé pour analyser les documents XML

Ces deux extensions sont par défaut à la plupart des packages d'installation PHP intégrés et ne nécessitent aucune installation supplémentaire.

2. Utilisez Curl pour obtenir des données XML

Téléchargeons d'abord le contenu XML à partir d'une adresse distante via Curl:

 function fetchXmlData($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);

    $data = curl_exec($ch);

    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch);
        return false;
    }

    curl_close($ch);
    return $data;
}

// Exemple URL
$url = 'https://api.m66.net/data/sample.xml';
$xmlContent = fetchXmlData($url);

if ($xmlContent === false) {
    exit('Obtenir XML échouer');
}

3. Utilisez XML_Parse pour analyser les données XML

La fonction XML_PARSE de PHP est une méthode d'analyse XML dirigée par des événements. Nous pouvons convertir le contenu XML en un tableau structuré en créant un analyseur et en configurant des fonctions de traitement.

 function parseXmlToArray($xml) {
    $parser = xml_parser_create();
    $values = [];
    $index = [];

    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

    if (!xml_parse_into_struct($parser, $xml, $values, $index)) {
        echo "XML Erreur d'analyse: " . xml_error_string(xml_get_error_code($parser));
        xml_parser_free($parser);
        return false;
    }

    xml_parser_free($parser);
    return buildXmlArray($values);
}

function buildXmlArray($values) {
    $result = [];
    $stack = [];

    foreach ($values as $val) {
        switch ($val['type']) {
            case 'open':
                $tag = $val['tag'];
                $child = [];
                if (isset($val['attributes'])) {
                    $child['@attributes'] = $val['attributes'];
                }
                $child['@children'] = [];
                $stack[] = [&$result];
                $result[$tag][] = &$child;
                $result = &$child['@children'];
                break;

            case 'complete':
                $tag = $val['tag'];
                $entry = isset($val['value']) ? $val['value'] : '';
                if (isset($val['attributes'])) {
                    $result[$tag][] = [
                        '@attributes' => $val['attributes'],
                        '@value' => $entry
                    ];
                } else {
                    $result[$tag][] = $entry;
                }
                break;

            case 'close':
                $result = &$stack[count($stack) - 1][0];
                array_pop($stack);
                break;
        }
    }

    return $result;
}

4. Exemple complet: du téléchargement à l'analyse

En combinant les deux parties ci-dessus, nous pouvons implémenter le processus complet "Download + Parsing":

 $url = 'https://api.m66.net/data/sample.xml';
$xmlContent = fetchXmlData($url);

if ($xmlContent) {
    $parsedData = parseXmlToArray($xmlContent);
    echo "<pre>";
    print_r($parsedData);
    echo "</pre>";
}

5. Résumé

Grâce à cet article, vous avez maîtrisé comment utiliser l'extension Curl de PHP pour télécharger les données XML et comment utiliser XML_Parse pour l'analyser dans un tableau structuré. Bien que XML_Parse soit une méthode de niveau inférieur, il a des performances élevées et peu de dépendances, ce qui le rend adapté aux projets avec des exigences de performance.

Si vous devez gérer des XML plus complexes, il est recommandé d'essayer d'utiliser des analyseurs plus avancés tels que SimplexML ou DomDocument à l'avenir.