« グルジアとロシアが戦争で中国のメンツ丸潰れ | トップページ | 0120995090 »

2008年8月10日 (日)

[PHP] SimpleXML関数を使い名前空間の入った要素名をXML解析

をしたいのですが手こずっています。

これができると為替APIを配信しているサイトから右サイドバーにある為替ブログパーツが作れます。

まずはPHPでXML解析するとは

DOM、SimpleXML関数、XPathメソッドを使ってXML解析比較。XPathの場合が一番短いソースで書けますが、難しかったらDOMでゴリゴリ書いても大丈夫です。

XMLファイルを解析(パース)するSimpleXML関数

また[XPath]とは

XPathはXML文書の特定部分を指し示すことができます。

XPath を使ってタイトル要素を見つける。

[名前空間=ネームスペース] コロン(:)付きの要素名

RSS 1.0 では、dc の名前空間はxmlns:dc="http://purl.org/dc/elements/1.1/"と定義されているので、これを引数として指定する。

たくさんの方のエントリーを見ると名前空間(:)で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 ?>

>>PHP一行で書けるRSSリーダー

PHP1行で書けるとは。

[追記]
後編 WebサービスをAmazonで知る - ITmedia エンタープライズ

[追記2] 2008/8/11
ようやく引っ張れました。

[追記3]2008.10.28
PHP 5.3の名前空間仕様が変更されました

|

« グルジアとロシアが戦争で中国のメンツ丸潰れ | トップページ | 0120995090 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« グルジアとロシアが戦争で中国のメンツ丸潰れ | トップページ | 0120995090 »