AS3.0からXMLクラスが、トップレベルのデータ形式のクラスになった。
StringとかArrayとか同じような感じ。
XMLクラスにはload()メソッドとかはなくなるので、データのロードはflash.net.URLLoaderクラスがやることになる。
http://livedocs.macromedia.com/flex/2/langref/index.html参照。
サンプルは以下のようになる。
package classes.xml{ import flash.net.*; import flash.display.*; import flash.events.*; public class LoadAmazonXML extends Sprite{ private var urlloader:URLLoader; private var urlrequest:URLRequest; private var optype:String;//オペレーションのタイプ。 public function LoadAmazonXML(tgt:Function,op:String){ optype=op; urlloader=new URLLoader(); urlloader.addEventListener(Event.COMPLETE,tgt); } public function makeURL(pr:Array):void{ var myid:String="自分のIDを入れる"; var urlstr:String="http://webservices.amazon.co.jp/onca/xml ?Service=AWSECommerceService&AWSAccessKeyId=" +myid +"&&AssociateTag=macinbasic-22&Version=2005-10-05&Operation=" +optype; switch(optype){ case "BrowseNodeLookup": urlstr+="&BrowseNodeId=" +pr[0]; break; } urlrequest=new URLRequest(urlstr); } //urlstrを作成した後、ロードをかける。 public function load():void{ urlloader.load(urlrequest); } } }
基本的にはURLLoaderにロードさせるとき、URLRequestというオブジェクトを作って渡す。
呼び出し側としては、以下のようになる。
package classes.test{ import classes.xml.*; import flash.events.*; import flash.net.*; import flash.display.*; public class TestMain extends MovieClip{ public function TestMain(){ var lax:LoadAmazonXML; lax=new LoadAmazonXML(dispData,"BrowseNodeLookup"); lax.makeURL(["465610"]); //URLを生成させる。 //パラメータは:amazonECSのOperation、BrowseNodeId lax.load(); } public function dispData(eventObj:Event):void{ trace(eventObj.target.data); } } }
ロードされたデータは、URLLoaderのdataプロパティに格納される。
URLVariablesというクラスもある。
これはURLに添付する送信データを、URLRequestの.dataプロパティに格納することを可能にする。
これを使うと、上の例のURLRequestの作成部分は以下のように整理することが出来る。
public function makeURL(pr:Array):void{ var myid:String="自分のIDを入れる"; var urlstr:String="http://webservices.amazon.co.jp/onca/xml"; var urlvar:URLVariables =new URLVariables(); urlvar.Service="AWSECommerceService"; urlvar.AWSAccessKeyId=myid; urlvar.AssociateTag="macinbasic-22"; urlvar.Version="2005-10-05"; urlvar.Operation=optype; switch(optype){ case "BrowseNodeLookup": urlvar.BrowseNodeId=pr[0]; break; } urlrequest=new URLRequest(urlstr); urlrequest.data=urlvar; }
確かに使い易く、きれいに整理できる。