ホームページ  >  記事  >  バックエンド開発  >  PHPでXMLをJSON形式に変換するにはどうすればよいですか? 3つの共有方法

PHPでXMLをJSON形式に変換するにはどうすればよいですか? 3つの共有方法

PHPz
PHPzオリジナル
2023-03-22 10:38:482511ブラウズ

データを処理するとき、XML 形式を JSON 形式に変換する必要が生じることがよくあります。 PHP には、この操作の実行に役立つ多くの組み込み関数が含まれています。この記事では、XML 形式を JSON 形式に変換するさまざまな方法について説明します。

方法 1: SimpleXML と json_encode を使用する

SimpleXML は、XML データを処理するための PHP の組み込み拡張機能です。 SimpleXML を使用して XML を PHP のオブジェクトに解析し、json_encode を使用してそれを JSON 形式のデータにエンコードできます。

$xml = '<root><name>John Doe</name><age>25</age><city>New York</city></root>';
$simpleXML = simplexml_load_string($xml);
$json = json_encode($simpleXML);
echo $json;

上記のコードは、次のデータを JSON 形式で出力します。

{
   "name": "John Doe",
   "age": "25",
   "city": "New York"
}

このメソッドはシンプルで使いやすいですが、小さい XML ファイルに対してのみ機能します。大きな XML ファイルの場合、SimpleXML は大量のメモリを消費し、サーバーがクラッシュする可能性があります。

方法 2: DOMDocument と json_encode を使用する

XML 形式を JSON 形式に変換するもう 1 つの方法は、DOMDocument を使用することです。 DOMDocument は、XML データを処理するために PHP に組み込まれているライブラリです。 DOMDocument を使用して XML を DOM オブジェクトに解析し、DOM ツリーを走査して配列に変換し、json_encode を使用して JSON 形式のデータにエンコードできます。

$xml = '<root><name>John Doe</name><age>25</age><city>New York</city></root>';
$dom = new DOMDocument;
$dom->loadXML($xml);
$json = json_encode(domDocumentToArray($dom));
echo $json;

function domDocumentToArray($node) {
    $output = array();

    switch ($node->nodeType) {
        case XML_CDATA_SECTION_NODE:
        case XML_TEXT_NODE:
            $output = trim($node->textContent);
            break;

        case XML_ELEMENT_NODE:
            for ($i = 0, $m = $node->childNodes->length; $i < $m; $i++) {
                $child = $node->childNodes->item($i);
                $v = domDocumentToArray($child);
                if(isset($child->tagName)) {
                    $t = $child->tagName;
                    if(!isset($output[$t])) {
                        $output[$t] = array();
                    }
                    $output[$t][] = $v;
                }
                elseif($v) {
                    $output = (string) $v;
                }
            }
            if($node->attributes->length && !is_array($output)) { 
                $output = array('@content'=>$output); 
            }
            if(is_array($output)) {
                if($node->attributes->length) {
                    $a = array();
                    foreach($node->attributes as $attrName => $attrNode) {
                        $a[$attrName] = (string) $attrNode->value;
                    }
                    $output['@attributes'] = $a;
                }
                foreach ($output as $t => $v) {
                    if(is_array($v) && count($v)==1 && $t!='@attributes') {
                        $output[$t] = $v[0];
                    }
                }
            }
            break;
    }
    return $output;
}

上記のコードは、次のデータを JSON 形式で出力します:

{
   "name": "John Doe",
   "age": "25",
   "city": "New York"
}

DOMDocument とカスタム関数を使用することで、メモリをあまり消費せずに大きな XML ファイルを処理できます。今回は、データを簡単にフィルタリング、並べ替え、変更することもできます。

方法 3: サードパーティのライブラリを使用する

公式に提供されている関数に加えて、役立つ他の PHP プラグインやサードパーティの拡張機能もあります。 XML 形式を JSON 形式に変換します。たとえば、PHP の XmlToJson 拡張機能を使用して、XML を JSON 形式のデータに解析できます。

$xml = '<root><name>John Doe</name><age>25</age><city>New York</city></root>';
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $values, $tags);
xml_parser_free($parser);
$json = json_encode(XmlToJson::toArray($values));
echo $json;

上記のコードは、次の JSON 形式でデータを出力します。

{
   "root": {
      "name": "John Doe",
      "age": "25",
      "city": "New York"
   }
}

XmlToJson 拡張機能は、大量のデータを処理し、データの整合性を維持するための信頼性が高く、安全かつ効率的な方法です。

#結論

どの方法を選択する場合でも、実際の状況に応じて適切な方法を選択する必要があります。小さな XML ファイルのみを扱う場合は、SimpleXML と json_encode、または DOMDocument と json_encode を使用することも良い方法です。ただし、大きな XML ファイルを処理する必要がある場合、最適な方法は、効率的な XML パーサーとカスタム関数を使用して XML を解析し、JSON 形式のデータに変換することです。ニーズが何であっても、PHP でそれらを満たす最適な方法を見つけることができます。

以上がPHPでXMLをJSON形式に変換するにはどうすればよいですか? 3つの共有方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。