[PHP] SimpleXML関数を使い名前空間の入った要素名をXML解析
をしたいのですが手こずっています。
これができると為替APIを配信しているサイトから右サイドバーにある為替ブログパーツが作れます。
まずはPHPでXML解析するとは
DOM、SimpleXML関数、XPathメソッドを使ってXML解析比較。XPathの場合が一番短いソースで書けますが、難しかったらDOMでゴリゴリ書いても大丈夫です。
XMLファイルを解析(パース)するSimpleXML関数
- simplexml_load_file(XMLファイルへのパス)
- simplexml_load_string
また[XPath]とは
XPathはXML文書の特定部分を指し示すことができます。
XPath を使ってタイトル要素を見つける。
[名前空間=ネームスペース] コロン(:)付きの要素名
RSS 1.0 では、dc の名前空間はxmlns:dc="http://purl.org/dc/elements/1.1/"と定義されているので、これを引数として指定する。
- (楽天検索APIを)PHP5で名前空間を取り扱う - 教えてgoo!
- PHPでAmazon Web サービス ~ SimpleXML(その2)
- 名前空間の接頭辞のついた属性を取得する方法 - 人力検索はてな
- youtubeAPI データー取得時の問題
- suz-lab: SimpleXML(PHP)で異なるネームスペースの要素にアクセス
たくさんの方のエントリーを見ると名前空間(:)でSimpleXMLと相性が悪いそうです。
> 要素名に:(コロン)が含まれている場合、どのように処理す
> ればよいのでしょうか?
要素名の : というのは XML では名前空間(namespace)を意味しています。 simplexml で、ある名前空間に属する node を取得するには、その名前空間を定義している URL を渡して children メソッドを呼ばなければいけません。RSS の先頭で dc (Dublin Core) 名前空間は
xmlns:dc="http://purl.org/dc/elements/1.1/"
と宣言されていますので、この場合は
$dc = $objXml->item->children('http://purl.org/dc/elements/1.1/');
echo $dc->date;とする必要があります。
>>Re:RSSを表示する
他にもコロン(:)をアンダーバー(_)など置き換えたり
str_replaceで(xmlns)を(_xmlns)に変更したり
色々面倒な処理をしないといけないようですが、PHP4のSAXインターフェース(xml_parser_create)より手間だけでなく処理速度も優れているそうなので
後々を考えPHP5にバージョンアップしてSimpleXMLを使った方がよさげですね。
[おまけ]
やはりXML解析ができるとRSSリーダーが作りたくなりますよね。
<?php foreach(simplexml_load_file('http://blog.myrss.jp/index.xml')->channel->item as $it) echo $it->description ?>
PHP1行で書けるとは。
[追記]
・後編 WebサービスをAmazonで知る - ITmedia エンタープライズ
[追記2] 2008/8/11
ようやく引っ張れました。
[追記3]2008.10.28
・PHP 5.3の名前空間仕様が変更されました
| 固定リンク








コメント