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 つの機能の使い方をそれぞれ紹介します。
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 を複数の配列で構成されるリレーショナル配列に変換します。
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 サイトの他の関連記事を参照してください。