SimpleXMLで特定の名前空間に属する子要素を取得する
日本PHPユーザー会のメーリングリストの過去ログを読んでいるとSimpleXMLで特定の名前空間に属する要素を取得する方法について書かれていました。これによるとsimplexml_elementのchildrenメソッドに名前空間URIを引数として渡すと、そのsimplexml_element下の特定の名前空間に属する子要素を取得できるようです。PHPの日本語版マニュアルでは
simplexml_element->children ( void )
と書いてありますが、英語版マニュアルにはちゃんと
simplexml_element->children ( [string nsprefix] )
と書いてありました。また、その下のUser Contributed Notesにもこのことについて書かれていますね。日本語版マニュアルばかり見ていたせいで、こんな方法があるとは気づきませんでした(これからは英語版マニュアルを優先的に見ることにしようかな…)。ちなみにPHP 5.0.4で試してみたところちゃんと動作しました。目的の要素にアクセスするのがちょっと面倒なような気もしますが、PHP 5.0.xの時点でちゃんと動作するのはこの方法しかないような気がするので、しばらくはこの方法を使ってみます。
ちなみに、PHP 5.1では
simplexml_element->registerXPathNamespace( $prefix, $namespaceURI )
というメソッドが追加される予定で、これによりXPathを用いることでよりスマートに目的の要素にアクセスできるようになると思います。早くPHP 5.1の正式版リリースされませんかね。
TrackBack URI: http://sks.s201.xrea.com/blog/archives/398/trackback