XML_Serializer

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でもあった気がする。
こっちはデーターの数を判別して力技でなんとかした。

コメント

タイトルとURLをコピーしました