【PHP】XPATHを使ってスマートに XML 解析をする方法
PHPではよく自前でXMLパーサーやラップクラスを作ってるのを見られますが、 それはちょっと微妙だと思います。
- 標準関数の方が早い。
- XML全体を配列にする無駄。
- 配列をつくるためのループ、読み出すためにまたループ、そしてその巨大配列に食われるメモリ
であれば、PHPの標準関数であるSimpleXMLかつXPATH表記を使ってみましょう。
$src = file_get_contents('http://event.yahoo.co.jp/list/rss/index.xml'); $xml = simplexml_load_string($src, "SimpleXMLElement", LIBXML_NOCDATA); // その1 foreach($xml->xpath('/rss/channel/item') as $item){ echo (string)$item->title . "\n"; echo (string)$item->link . "\n"; } // その2 foreach($xml->xpath('/rss/channel/item/title') as $title){ echo (string)$title . "\n"; }
いかがでしょうか?
XPATHがいかにスマートであるがあるかがわかります。
深い階層の配列をループで処理する必要もなくなります。
// こういう配列をよく見られますが、メンテナンスする側は大変です。
$data['rss']['channel']['item'][$i]['title'];
// スマートな解析はこちら。
$xml->xpath('/rss/channel/item/title');