PHP4でXMLファイルのパースは難しい。PHP5から採用されているsimple_xmlが使えないからだ。
そこで、PEARのXML_Serializerを利用することになる。しかし、ひとつ問題が判明した。
XML_Serializerは、例えば楽天ウェブサービスで商品情報をパースするとき、取得商品データーが複数のときと単数のときで、挙動が違うのだ。
複数のときは、オブジェクト内で配列構造を作ってくれるが、単数の場合は、配列にはならない。
よって、
foreach($object->Item as $item){ ~ }
を利用したプログラムだと、商品数が単数の場合は、上手く動かない。困った……。
先日、PHP5で動かしていたプログラムを、PHP4のサーバー上で動かそうとしたら、smple_xmlが’undefined function’となってしまい、PEARのXML_Serializerを利用したときに判明した。
しかし、解決策はあっさり見つかった。
こちらのエントリー
http://zap.hakox.net/index.php?e=401
XML_Serializerのオプション設定で、配列化したいアイテム名を設定してあげれば、問題はすべて解決する
‘forceEnum’ => array(‘Item’,…)
これでPHP4でXMLをパサーしたい場合も安心。
ちなみに、simple_xmlは自動的にやってくれるため、PHP5を利用するなら、問題ない。
確か同じような問題が、JavascriptのJSONscriptRequestでもあった気がする。
こっちはデーターの数を判別して力技でなんとかした。
コメント