「PHPでXPath を使用する」を勉強しています。
https://www.ibm.com/developerworks/jp/xml/library/x-xpathphp/
上記サイトのproducts.xmlを対象に、
「リスト 2. SimpleXML を使用し、すべてのノードを配列として表示する」
はそのままできるのですが、
「リスト 3. SimpleXML を使用し、すべての製品名を配列として表示する」
<?php
$xml = simplexml_load_file("products.xml");
$products = $xml->xpath("/PRODUCTS/PRODUCT/NAME");
print_r($products);
?>
*$products = $xml->xpath("/PRODUCTS/PRODUCT/NAME");
の部分が違うだけです。
だと、配列に何もはいりません。
Array ( [0] => SimpleXMLElement Object ( )
*この状態が、[0]~[3]まで表示
何が悪いのかわかりません。
教えていただけると大変助かります。
よろしくお願いします。
ありがとうございます。
コメントをまとめただけの回答で失礼します。
PHPのバージョン5.6.11、および5.5.27で修正されたようです。
最新版の5.6.14では正常に取得できる事を確認済みです。(※5.6.11および5.5系最新の5.5.30でも確認済みですが、5.5.27は未確認)
・PHP 5 ChangeLog
http://php.net/ChangeLog-5.php#5.6.11
Version 5.6.11
10 Jul 2015
- SimpleXML:
- Refactored the fix for bug #66084 (simplexml_load_string() mangles empty node name).
・Bug #66084 simplexml_load_string() mangles empty node name
https://bugs.php.net/bug.php?id=66084
・Fix #66084: whitespace depending iteration over SimpleXMLElements (php-src/1306)
https://github.com/php/php-src/pull/1306
英語が苦手なので全部は読んでいませんが、「var_dump」や「print_r」だけでなく「json_encode」にも影響があるという事です。
※libxmlの問題ではありませんでした。修正前の5.6.10でもバージョン2.9.2です。
単純にIBMのページの内容が正しくない(あるいは今のバージョンとは応答が違う)のだろうと思います。
__ミスもあるようですしね
__[SKU='soft5678'] で Pro Reporting が得られるみたいな記述だけど
__「Pro Reporting」は SKUが soft32323 だし(というか soft5678 は存在しない)
> Array ( [0] => SimpleXMLElement Object ( )
良く考えてみれば、これで良いんじゃないでしょうか?
xpath() の戻り値 $products は単なる配列で $products[0] は SimpleXMLElement。
$products[0] は何らかのプロパティやノードを含んでいる訳ではないので $product[0] は SimpleXMLElement としか表示できない。
例えば、
<NAME><AAA>hoge</AAA>Widget Reporting</NAME>
のように書いてやれば
Array ( [0] => SimpleXMLElement Object ( [hoge] => fuga )
のようになります。
ありがとうございます。
コメントをまとめただけの回答で失礼します。
PHPのバージョン5.6.11、および5.5.27で修正されたようです。
最新版の5.6.14では正常に取得できる事を確認済みです。(※5.6.11および5.5系最新の5.5.30でも確認済みですが、5.5.27は未確認)
・PHP 5 ChangeLog
http://php.net/ChangeLog-5.php#5.6.11
Version 5.6.11
10 Jul 2015
- SimpleXML:
- Refactored the fix for bug #66084 (simplexml_load_string() mangles empty node name).
・Bug #66084 simplexml_load_string() mangles empty node name
https://bugs.php.net/bug.php?id=66084
・Fix #66084: whitespace depending iteration over SimpleXMLElements (php-src/1306)
https://github.com/php/php-src/pull/1306
英語が苦手なので全部は読んでいませんが、「var_dump」や「print_r」だけでなく「json_encode」にも影響があるという事です。
※libxmlの問題ではありませんでした。修正前の5.6.10でもバージョン2.9.2です。
ありがとうございました。お手数おかけしました。また、よろしくお願いします。
ありがとうございました。お手数おかけしました。また、よろしくお願いします。
2015/10/13 23:02:39