ホームページ  >  記事  >  バックエンド開発  >  PHPでXMLを配列に変換する方法

PHPでXMLを配列に変換する方法

PHPz
PHPzオリジナル
2023-04-20 15:05:401404ブラウズ

Web 開発では、XML はデータの送信および保存形式として広く使用されています。 XML 形式のデータを使用する必要がある場合、通常は後続の操作を容易にするために XML 文字列を配列またはオブジェクトに変換する必要があります。 PHP では、XML 文字列を配列に簡単に変換できます。この記事では、PHP が XML を配列に変換する方法を紹介します。

1. XML 形式の概要

XML はマークアップ言語であり、主にデータの送信と保存に使用されます。 XML には要素と属性が含まれます。要素は通常、次のようなタグで表されます。

<book>
  <title>PHP从入门到精通</title>
  <price>50</price>
</book>

この XML テキストは、タイトルと価格のサブ要素を含む book 要素を定義します。

Attribute は、次のような追加情報を要素に追加する方法です。

<book category="Programming">
  <title>PHP从入门到精通</title>
  <price>50</price>
</book>

この例では、book 要素の category 属性に値「Programming」を設定します。

2. PHP での XML から配列への変換

PHP には XML を処理するための関数が多数用意されており、その中で最も一般的に使用される関数は simplexml_load_string() と xml_parse_into_struct() です。以下にこれら 2 つの機能の使い方をそれぞれ紹介します。

  1. simplexml_load_string()

simplexml_load_string() 関数は、XML 文字列から SimpleXMLElement オブジェクトを作成でき、これを通じて XML 内の要素と属性に簡単にアクセスできます。 SimpleXMLElement オブジェクトを配列または他のタイプのデータに変換することもできます。以下は、simplexml_load_string() 関数を使用して XML を配列に変換する例です。

$xml = '<bookstore>
            <book category="Programming">
                <title>PHP从入门到精通</title>
                <author>张三</author>
                <price>50</price>
            </book>
            <book category="Web Development">
                <title>JavaScript高级编程</title>
                <author>李四</author>
                <price>45</price>
            </book>
        </bookstore>';
        
$data = json_decode(json_encode(simplexml_load_string($xml)), true);
print_r($data);

上記のコードを実行すると、出力は次のようになります。

Array
(
    [book] => Array
        (
            [0] => Array
                (
                    [@attributes] => Array
                        (
                            [category] => Programming
                        )
                    [title] => PHP从入门到精通
                    [author] => 张三
                    [price] => 50
                )
            [1] => Array
                (
                    [@attributes] => Array
                        (
                            [category] => Web Development
                        )
                    [title] => JavaScript高级编程
                    [author] => 李四
                    [price] => 45
                )
        )
)

ご覧のとおり、 simplexml_load_string() 関数は、XML を複数の配列で構成されるリレーショナル配列に変換します。

  1. xml_parse_into_struct()

xml_parse_into_struct () 関数は、XML 文字列を配列に解析します。以下は、xml_parse_into_struct() 関数を使用して XML を配列に変換する例です。

$xml = '<bookstore>
            <book category="Programming">
                <title>PHP从入门到精通</title>
                <author>张三</author>
                <price>50</price>
            </book>
            <book category="Web Development">
                <title>JavaScript高级编程</title>
                <author>李四</author>
                <price>45</price>
            </book>
        </bookstore>';

$p = xml_parser_create();
xml_parse_into_struct($p, $xml, $vals);
xml_parser_free($p);

print_r($vals);

上記のコードを実行すると、出力は次のようになります。

Array
(
    [0] => Array
        (
            [tag] => BOOKSTORE
            [type] => open
            [level] => 1
        )

    [1] => Array
        (
            [tag] => BOOK
            [type] => open
            [level] => 2
            [attributes] => Array
                (
                    [CATEGORY] => Programming
                )
        )

    [2] => Array
        (
            [tag] => TITLE
            [type] => open
            [level] => 3
        )

    [3] => Array
        (
            [tag] => TITLE
            [type] => close
            [level] => 3
            [value] => PHP从入门到精通
        )

    [4] => Array
        (
            [tag] => AUTHOR
            [type] => open
            [level] => 3
        )

    [5] => Array
        (
            [tag] => AUTHOR
            [type] => close
            [level] => 3
            [value] => 张三
        )

    [6] => Array
        (
            [tag] => PRICE
            [type] => open
            [level] => 3
        )

    [7] => Array
        (
            [tag] => PRICE
            [type] => close
            [level] => 3
            [value] => 50
        )

    [8] => Array
        (
            [tag] => BOOK
            [type] => close
            [level] => 2
        )

    [9] => Array
        (
            [tag] => BOOK
            [type] => open
            [level] => 2
            [attributes] => Array
                (
                    [CATEGORY] => Web Development
                )
        )

    [10] => Array
        (
            [tag] => TITLE
            [type] => open
            [level] => 3
        )

    [11] => Array
        (
            [tag] => TITLE
            [type] => close
            [level] => 3
            [value] => JavaScript高级编程
        )

    [12] => Array
        (
            [tag] => AUTHOR
            [type] => open
            [level] => 3
        )

    [13] => Array
        (
            [tag] => AUTHOR
            [type] => close
            [level] => 3
            [value] => 李四
        )

    [14] => Array
        (
            [tag] => PRICE
            [type] => open
            [level] => 3
        )

    [15] => Array
        (
            [tag] => PRICE
            [type] => close
            [level] => 3
            [value] => 45
        )

    [16] => Array
        (
            [tag] => BOOK
            [type] => close
            [level] => 2
        )

    [17] => Array
        (
            [tag] => BOOKSTORE
            [type] => close
            [level] => 1
        )
)

ご覧のとおり、 xml_parse_into_struct() 関数は、XML を複数の配列で構成されるリレーショナル配列に解析します。各配列は XML の要素または属性を表します。

3. 変換に DOMDocument 拡張機能を使用する

PHP には、DOMDocument 拡張機能を使用して XML を解析する方法もあります。 DOMDocument は PHP の組み込み拡張機能であり、非常に強力です。以下は、DOMDocument を使用して XML データを変換する例です。

$xml = '<bookstore>
            <book category="Programming">
                <title>PHP从入门到精通</title>
                <author>张三</author>
                <price>50</price>
            </book>
            <book category="Web Development">
                <title>JavaScript高级编程</title>
                <author>李四</author>
                <price>45</price>
            </book>
        </bookstore>';

$dom = new DOMDocument;
$dom->loadXML($xml);
$data = array();
foreach ($dom->getElementsByTagName('book') as $book) {
    $data[] = array(
        'category' => $book->getAttribute('category'),
        'title' => $book->getElementsByTagName('title')->item(0)->textContent,
        'author' => $book->getElementsByTagName('author')->item(0)->textContent,
        'price' => $book->getElementsByTagName('price')->item(0)->textContent,
    );
}
print_r($data);

上記のコードを実行すると、出力結果は次のようになります。

Array
(
    [0] => Array
        (
            [category] => Programming
            [title] => PHP从入门到精通
            [author] => 张三
            [price] => 50
        )

    [1] => Array
        (
            [category] => Web Development
            [title] => JavaScript高级编程
            [author] => 李四
            [price] => 45
        )

)

ご覧のとおり、DOMDocument を使用して XML データを解析しています。を使用すると、XML データ要素と属性を簡単に取得して、配列に変換できます。

4. 概要

上記は、PHP が XML を配列に変換するためのいくつかの方法、つまり simplexml_load_string() 関数、xml_parse_into_struct() 関数、および DOMDocument 拡張機能の使用です。各方法には適用可能なシナリオがあり、実際のニーズに応じて適切な方法を選択してください。もちろん、どの方法を使用する場合でも、データの正確性と整合性を確保するには、XML の形式と仕様に注意を払う必要があります。

以上がPHPでXMLを配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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