2008年3月30日日曜日

XML.ObjTreeでXMLのJSON(オブジェクト)化

スズキです。

以前、XMLのJSON化をJSON-lib(Java)を用いて、
サーバサイドで行う実験をしました。
http://suz-lab.blogspot.com/2008/01/json-libxmljson.html

まあ、できたことはできたのですが、

<hoge0>
  <hoge1/>
</hoge0>

<hoge0>
  <hoge1/>
  <hoge1/>
</hoge0>

となりうる場合のhoge1の扱いが微妙でした。
(前者は単一のプロパティ、校舎は配列と扱ってしまう)

なので、今回はObjTree(Javascript)を使い
http://www.kawa.net/works/js/xml/objtree.html
クライアントサイドで、表記を行うことにしました。

Amazonのサービスを例にとると、
下記のような感じで使うことができます。(jQuery前提ですが...)

$(function(){
  var url = "php/proxy.php/http://xml-jp.amznxslt.com/onca/xml";
  url += "?Service=AWSECommerceService";
  url += "&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX";
  url += "&Version=2004-10-04";
  url += "&ResponseGroup=Small";
  url += "&ItemPage=1";
  url += "&Operation=ItemSearch";
  url += "&ContentType=text/xml";
  url += "&SearchIndex=Books";
  url += "&Keywords=Ajax";
  var xotree = new XML.ObjTree()
  xotree.parseHTTP(url, null, function(data){
  alert(data.ItemSearchResponse);
  });
});

当然、XML.ObjTree(objtree.js)を読み込む必要がありますが、
http://www.kawa.net/works/js/xml/src/XML.ObjTree-0.24/lib/XML/ObjTree.js
parseHTTPを使うにはHTTP.Request(request.js)も
http://openjsan.org/doc/r/rk/rkinyon/HTTP/Request/0.03/lib/HTTP/Request.html
先に読み込む必要があります。

まあ、HTMLとしてはこんな感じでしょうか?

<script type="text/javascript" src="js/ext/request.js"></script>
<script type="text/javascript" src="js/ext/objtree.js"></script>

ObjTreeの場合は、上述した配列になり得るノードの扱いも、
あらかじめ、force_arrayプロパティで指定することにより、
常に(一つしか出現しなくても)配列として扱うことができます。

これが決定版かな?

--

http://suz-lab.blogspot.com/

0 コメント: