dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

PHPでRSSフィードのXMLを処理する時のSimpleXMLの使い方

PHPのSimpleXMLでちょっと難儀したのでメモです。

次のコードはRSSフィードからタイトル、リンク、記事を抜き出して表示するものです。

 1 <?php
 2 $url = "http://foo.bar.com/feed.php";
 3 $contents = preg_replace('/xml:/', 'xml_', file_get_contents($url)); # Point-1
 4 $xml = simplexml_load_string($contents, 'SimpleXMLElement', LIBXML_NOCDATA); # Point-2
 5 $entrys = $xml->entry;
 6 foreach ($entrys as $entry) {
 7     $title = (string) $entry->title; # Point-3
 8     $href = (string) $entry->content->attributes()->xml_base; # Point-4
 9     $content = (string) $entry->content;
10     echo "<h3><a href='{$href}' target='_blank'>{$title}</a></h3>";
11     echo "<p>{$content}</p>";
12 }
13 ?>

 Point 1:

XML名前空間を使っている部分は単純にパースしてくれないので、事前に変換してしまいます。

 

Point 2:

CDATA要素をパースするにはこのおまじないが必要です。

 

Point 3:

オブジェクトになっている文字列は(string)でキャストします。

 

Point 4:

タグの属性データを取得するにはattributes()を使います。

 

予備知識ゼロでネットを頼りにXMLの処理に取り組むと意外に手間取りました。