$yuzu->log();

技術ネタなど。

【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');