現在の位置: ホーム> 最新記事一覧> xml_parseの結果をjson_encodeでjson形式に変換する方法

xml_parseの結果をjson_encodeでjson形式に変換する方法

M66 2025-04-24

PHP開発では、特にレガシーシステムをドッキングしたり、特定のAPIを読んだ場合、XMLデータの処理は一般的な要件です。 JSONは現在より人気がありますが、XMLにはまだ多くのデータが提供されています。フロントエンドの処理またはその後の処理を容易にするには、XMLをJSON形式に変換する必要があることがよくあります。

この記事では、PHPのXML_PARSE関数を使用してXML文字列を配列構造に解析し、 json_encodeを介してJSON形式に変換します。

ステップ1:XMLデータを準備します

最初に、サンプルXMLデータを準備して、リモートアドレスから得られた応答をシミュレートします(たとえば、 https://api.m66.net/data.xml ):

 $xml_data = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <title>PHP プログラミングの練習</title>
        <author>チャン・サン</author>
        <year>2021</year>
    </book>
    <book>
        <title>詳細な理解 XML</title>
        <author>li si</author>
        <year>2020</year>
    </book>
</books>
XML;

ステップ2:XMLを配列に解析します

XML_PARSEは、低レベルのXML解析機能です。通常、 XML_PARSER_CREATEとコールバック関数を組み合わせて、XMLコンテンツを配列に変換します。 XMLを連想配列に変換する単純な解析関数は次のとおりです。

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

注:上記のコードは使用法のデモ用であり、可能なすべてのXML構造を考慮していません。 SimplexMLやDomdocumentなどのより完全なパーサーを生産環境で使用することをお勧めします。

ステップ3:json_encodeを使用して、json形式に変換します

配列構造を使用すると、JSONに変換するのは非常に簡単です。JSON_ENCODE使用するだけです。

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

echo $json_result;

出力の結果は、ほぼ次のとおりです。

 {
    "BOOK": [
        {
            "TITLE": "PHP プログラミングの練習",
            "AUTHOR": "チャン・サン",
            "YEAR": "2021"
        },
        {
            "TITLE": "詳細な理解 XML",
            "AUTHOR": "li si",
            "YEAR": "2020"
        }
    ]
}

高度な提案:SimplexMLまたはDOMを使用して変換を実行します

XML_PARSEは根本的な制御を提供しますが、複雑なXMLを扱うときは面倒に思えます。 PHPからSimplexmlを使用することを検討してください。

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

この方法は、クリアな構造を持つXMLによりシンプルで適しています。