Position actuelle: Accueil> Derniers articles> Comment convertir les résultats XML_PARSE avec JSON_ENCODE au format JSON

Comment convertir les résultats XML_PARSE avec JSON_ENCODE au format JSON

M66 2025-04-24

Dans le développement de PHP, le traitement des données XML est une exigence commune, en particulier lors de l'amarrage avec des systèmes hérités ou de la lecture de certaines API. Bien que JSON soit plus populaire maintenant, il y a encore beaucoup de données fournies dans XML. Pour faciliter le traitement frontal ou le traitement ultérieur, nous devons souvent convertir XML au format JSON.

Dans cet article, nous utiliserons la fonction XML_PARSE de PHP pour analyser les chaînes XML dans une structure de tableau, puis les convertir au format JSON via JSON_ENCODOD .

Étape 1: Préparer les données XML

Nous préparons d'abord un élément d'échantillon de données XML pour simuler la réponse obtenue à partir d'une adresse distante (par exemple, https://api.m66.net/data.xml ):

 $xml_data = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <title>PHP Pratique de programmation</title>
        <author>Zhang San</author>
        <year>2021</year>
    </book>
    <book>
        <title>Compréhension approfondie XML</title>
        <author>Li si</author>
        <year>2020</year>
    </book>
</books>
XML;

Étape 2: analyser XML dans un tableau

XML_PARSE est une fonction d'analyse XML de bas niveau. Habituellement, nous combinons les fonctions XML_PARSER_CREATE et RAPPEL pour convertir le contenu XML en tableaux. Voici une fonction d'analyse simple qui convertit XML en un tableau associatif:

 function xml_to_array($xml_string) {
    $parser = xml_parser_create();
    xml_parse_into_struct($parser, $xml_string, $values, $index);
    xml_parser_free($parser);

    $result = [];
    $stack = [];

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

            case 'complete':
                $tag = $val['tag'];
                $value = isset($val['value']) ? $val['value'] : '';
                if (!isset($result[$tag])) {
                    $result[$tag] = [];
                }
                $result[$tag][] = $value;
                break;

            case 'close':
                array_pop($stack);
                break;
        }
    }

    return $result;
}

Remarque: Le code ci-dessus est pour la démonstration de l'utilisation et ne prend pas en compte toutes les structures XML possibles. Il est recommandé qu'un analyseur plus complet tel que SimplexML ou DomDocument soit utilisé dans l'environnement de production.

Étape 3: Utilisez json_encode pour convertir au format JSON

Avec la structure du tableau, la convertir en JSON est très simple, utilisez simplement JSON_ENCODE :

 $parsed_array = xml_to_array($xml_data);
$json_result = json_encode($parsed_array, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

echo $json_result;

Les résultats de sortie sont à peu près les suivants:

 {
    "BOOK": [
        {
            "TITLE": "PHP Pratique de programmation",
            "AUTHOR": "Zhang San",
            "YEAR": "2021"
        },
        {
            "TITLE": "Compréhension approfondie XML",
            "AUTHOR": "Li si",
            "YEAR": "2020"
        }
    ]
}

Suggestions avancées: utilisez simplexml ou DOM pour effectuer des conversions

Bien que XML_Parse fournit un contrôle sous-jacent, il semble lourd lorsqu'il s'agit de XML complexe. Envisagez d'utiliser Simplexml à partir de PHP:

 $xml = simplexml_load_string($xml_data);
$json = json_encode($xml, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;

Cette méthode est plus simple et plus adaptée à XML avec une structure claire.