ラボ神部です。
いろいろなウェブサービスの API を利用する際、毎回スキーマの異なる XML 文書から必要な箇所を抜き出すのは苦労するものです。DOM を使うにも構文が複雑ですし、PEAR の XML_RSS ライブラリのように毎回同じ書式でやればいいというわけでもありません。
(例えば、そう、こんな感じで。)
require_once("XML/RSS.php"); $rss =& new XML_RSS($rss_url);$rss->parse();
foreach ($rss->getItems() as $item) {
//$item に対して何かの処理
}
しかし、Keith Devens .com - PHP XML Library, version 1.2b で配布されている xml.php を読み込むだけで、どんな XML スキーマの XML ドキュメントでも、とりあえずは PHP の配列に取り込むことができます。
(こんな風に)
include('xml.php');
$data = XML_unserialize($xml);
さらに、配列を XML 化することも出来ちゃうようです。
include('xml.php'); $xml = XML_serialize($data);
これはすごい!
今まで面白そうな API が公開されていても、parsing の処理の手間を考えるとちょっと手をつけにくいなと思っていたものも、気軽に試すことが出来そうですね。こういう部分の敷居がグッと下がるのはとっても助かります。ブックマークのコメント を見ると、2005年当時からあったようですが、いまいちこれで決め手という感じもないですね。
もう少し調べてみると、PHP4でxmlのパース処理をする方法はいくつかあるようですが、いずれもくせがあるようです。自分的には、xml.php 的な使い方がすごく使いやすいので、PHP4 な環境ではこれで行こうかとも思いますが。
ちなみに、PHP のバージョンが 5 以降なら、SimpleXML関数 の simplexml_load_string - PHPマニュアル を使うのが正しいようです。DOM風に要素を取り出す方法もあるようですが、PHP5を試してみる - SimpleXML関数でRSSしてみる - Do You PHP? で紹介されているように、要素名の配列から子要素を $parent->child という形で呼び出すのが扱いやすそうですね。
$article = simplexml_load_file('test.xml');
echo $article->subject;
このあたりはもう少し研究してみたいと思います。一度身につけておけばそれでずっと使えるものでしょうから。
(追記)
外部サーバのファイルオープンを禁止していると、SimpleXML は使えないようです。地味ですがこちらも注意。
薬箱 - PHP simplexml_load_file 関数について
関連記事


