これが私のコードです:
$XML = <<<XML
<items>
<item id="123">
<name>Item 1</name>
</item>
<item id="456">
<name>Item 2</name>
</item>
<item id="789">
<name>Item 3</name>
</item>
</items>
XML;
$objSimpleXML = new SimpleXMLElement($XML);
print_r($objSimpleXML->xpath('./item[1]'));
print "- - - - - - -\n";
print_r($objSimpleXML->xpath('./item[2][@id]'));
print "- - - - - - -\n";
print_r($objSimpleXML->xpath('./item[1]/name'));
特別なことは何もありません。を介していくつかのデータを抽出しようとしていますXPath
。XML
構成ファイルからデータをロードする動的プログラムを設計するには、パスを文字列にする必要があります。
PHPオブジェクトアクセスを使用する場合、$objSimpleXML->items->item[0]['id']
すべてが正常に機能します。しかし、XPath
アプローチは実際には機能しません。上記のコードは、次の出力を生成します。
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 123
)
[name] => Item 1
)
)
- - - - - - -
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 456
)
[name] => Item 2
)
)
- - - - - - -
Array
(
[0] => SimpleXMLElement Object
(
)
)
私は最初の出力に同意します。ただし、2番目の出力では、属性の代わりに要素全体が返されます。なんで?そして、最後のリストは名前の内容の代わりに空ですか?