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;
}
確かに使い易く、きれいに整理できる。