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の処理に取り組むと意外に手間取りました。