simplexmlで「:(コロン)」や「-(ハイフン)」などの特殊文字が入ったノードを処理する方法
<Response> <Header-a> <Args>ああ</Args> </Header-a> <Body> <booksTotalSearch:BooksTotalSearch> <count>14</count> ・ ・
上記のようなxmlがあったとします。
ここで、
$xml = simplexml_load_string( $xmltxt ); ($xmltxtには上記xmlが入っているものとする)
とし、
$xml->Header-a
とすると「なんか変な - があるよ!」と怒られてしまいます。
こういう場合は、
$xml->{"Header-a"}
というように囲ってやればOK!参考→http://634.ayumu-baby.com/pukiwiki/index.php?PHP/SimpleXML
$xml->Body->booksTotalSearch:BooksTotalSearch
の場合もどうように怒られますが、これはちょっと勝手が違います。「:」はxmlの名前空間を表しているものなので
{}で囲ってやってもダメです。
この場合は、
$xml->registerXPathNamespace('booksTotalSearch', 'http://api.rakuten.co.jp/rws/rest/BooksTotalSearch/2009-04-15');
のように、名前空間を登録してやり、
※ブラウザでxmlを見ていると名前空間URIが表示されていない場合があります。ブラウザのソースを表示させ、ヘッダーの部分を見ましょう
$booksTotalSearch = $xml->xpath('//booksTotalSearch:BooksTotalSearch');
$booksTotalSearch[0]->count
とすることでアクセス可能です。
※registerXPathNamespace()は古いバージョンのphpにはありません