XML_RSSの存在意義

PHPでRSSの解析に使うXML_RSS、そして大抵それでは役に立たずに使う事になるXML_Parserですが、RSSの解析にはどちらも使わないのが正しいというのが結論。

PHPで何かを実装していくと、大体はPEARを使用してどうにかしようと考えるところなのだけど、XML関係に関して言えば標準ライブラリ(マニュアルの関数リファレンスに記載されているライブラリ)を使用するべきだろう。

大方のプログラマーがRSSを使用する必要があった時に、そのとき使えそうなライブラリを調査する事でXML_RSSに到達する。それは検索を『PHP RSS』とかするからだ。そして、数時間後には『XML_RSS』さらに数時間後には『XML_Parser』と検索をする目にあうわけだ。

その理由は簡単で、XML_RSSは非常に限定的な機能しかないので、最初は「お?簡単にRSSにアクセスできたZE」とか思うのだけど、すぐに自分がやりたいこと(縦横無尽にRSSにアクセス等)ができない事に気がつく事になる。そのあたりになると、XML_RSSはXML_Parserで実装されている事を知るので、結局は自分の使いたいものを作るしかないのかと考えこのクラスを派生させる事になるのだけど、それが大きな過ちだと言い切ろう。

というのも、RSSはXMLなので、RSSに縦横無尽にアクセスすると言う事はXMLを縦横無尽にアクセスする事の一例にすぎないわけだ。つまり、本来的にはXMLを縦横無人にアクセスする方法を手に入れればよいのだ。

そして、その方法はPEAR::XML_Parserではなく、標準機能として組み込まれている『Simple API for XML』か『Document Object Model』のどちらかだ。


これらはそれぞれSAXとDOMというAPIの仕様を実現したAPIであり、PHPではライブラリの追加無しに利用できる。それぞれ『Simple XML関数』、『DOM関数』としてマニュアルに項目がある。

この仕様を見てみるとXML_ParserがSimple XML関数と同等程度のライブラリである事に気がつくだろう。しかも、XML_Parserの方が優れているというわけでもない(もしかしたら、私が気がついていない利点があるのかもしれないけど)。

これらの関数のどちらを使うかはWikipediaで仕様を吟味して決めればよいと思うが、実際の所DOM一択でよいと思う。『Simple API for XML』は一回パースしたら、それ以上手を入れる必要がないデータやタグ指定でデータを取得する必要のないデータを作るために、早くてメモリが少ない方法が欲しい場合などに使用することになるのだろう。

DOM関数を使うとJavaScriptのdocumentで行なういつもの操作と同じやり方で要素にアクセスできる事に気がつくと思う。それもそのはず。documentはDOMオブジェクトだからだ。DOM関数でXMLをアクセスする事はJavaScriptでタグにアクセスする事とやりようはほとんど一緒なので、非常に素早く習得できる点が見逃せない。


というわけで、RSSを解析する場合はDOM関数一択で。

XML+DOMという知識を高めておくと、現状のあらゆるメジャーな開発言語においてXMLを容易に扱う共通手法を習得できる点も見逃せない。