homeへのリンクです。

flashでAmazonECS 13

2006年08月07日

ParseAmazonXMLクラスは以下のようにすることにした。
ネームスペースを入れないと、child()が使えないので、その部分を省いて使えるようにしただけのもの。

package classes.xml{
   public class ParseAmazonXML{
   //xmllist:検索対象のxmlのリスト,uri:ネームスペースのuri,nodename:抽出対象のノード名
      public static function getList(xmllist:XMLList,uri:String,nodename:Array):XMLList{
         var qname:QName=new QName(uri,nodename.shift());
         xmllist=xmllist.child(qname);
         if(nodename.length>0){
            xmllist=ParseAmazonXML.getList(xmllist,uri,nodename);
         }
         return xmllist;
      }
   }
}

呼び出し側は、以下のような感じで使うことになる。

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=new LoadAmazonXML();
         lax.addListener(Event.COMPLETE,dispData);
         //URLを生成させる。パラメータは:amazonECSのOperation、BrowseNodeId
         lax.makeURL("BrowseNodeLookup",["465610"]);
         lax.load();
      }
      public function dispData(eventObj:Event):void{
         var xml:XMLList=XMLList(eventObj.target.data);
         var uri:String=xml.namespace().uri;
         var idl:XMLList=ParseAmazonXML.getList(xml,uri,["BrowseNodes","BrowseNode",
"Children","BrowseNode","BrowseNodeId"]);
         var nml:XMLList=ParseAmazonXML.getList(xml,uri,["BrowseNodes","BrowseNode",
"Children","BrowseNode","Name"]);
         for(var i:Number=0;i<idl.length();i++){
            trace(idl[i].text());
            trace(nml[i].text());
          }
      }
   }
}

LoadAmazonXML(URLLoaderクラスをカスタマイズしたようなもの)のリスナーハンドラの中に書き込む感じになる。
ノードの名前を、階層順に配列で渡して検索させる。
とりあえず、xpathに似た感じでデータを抽出できる。

上を実行すると

466284
文学・評論
571582
人文・思想
571584
社会・政治
492152
ノンフィクション
466286
歴史・地理
466282
ビジネス・経済・キャリア
492054
投資・金融・会社経営
466290
科学・テクノロジー
492166
医学・薬学
466298
コンピュータ・インターネット
466294
アート・建築・デザイン
466292
実用・スポーツ・ホビー
492228
資格・検定
466304
暮らし・健康・子育て
492090
旅行ガイド
466302
語学・辞事典・年鑑
3148931
教育・学参・受験
466306
こども
466280
コミック・アニメ・BL
500592
タレント写真集
492266
ゲーム攻略本
466296
エンターテイメント
466300
新書・文庫
13384021
雑誌
746102
楽譜・スコア・音楽書
13383771
ポスター
10667101
アダルト

というリストが得られる。

もともとのXMLの内容参照。

AS3.0リファレンス参照。