Mach3.laBlog

AS3備忘録: XMLをロードする

この記事は賞味期限切れです。(更新から1年が経過しています)

人は忘れていく生き物。
必要になる度に細部を忘れていたりしてリファレンス見たりしちゃうので、
この際ログっておきます。AS3でのXMLロード。

メインに使われるのはURLLoaderクラス。
flash.net.URLLoader (ActionScript 3.0)

URLLoader クラスは、指定した URL からテキスト、バイナリデータ、または URL エンコード形式の変数をダウンロードする際に使用します。動的なデータ駆動アプリケーションで使用するテキストファイル、XML、その他の情報をダウンロードする場合に便利です。

XMLやテキストファイルはもちろん、画像などのバイナリデータのロードにも活用します。
画像等の場合はLoaderを使ったりもできますが、Loaderはロード完了時にイベント等を拾えないので
ローディングインジケータなんかを付けたい場合はやはりURLLoaderを使うことになります。

基本はこうですね。

var ul:URLLoader = new URLLoader;
ul.addEventListener(Event.COMPLETE, xmlOnComplete);
var req:URLRequest = new URLRequest("content.xml");
ul.load(req);

loadメソッドの引数にはURLObjectを使用します。
※私はよく勢いでURLをそのままぶち込んでしまってエラー吐かせます(!!)
xmlOnLoadedにはロード完了時のイベントハンドラを登録します。
イベントハンドラの引数にはEventオブジェクトが渡されるので、きちんと受け取りましょう。

public function xmlOnComplete(e:Event):void{
    trace("---XML successfully loaded---");
    var xml:XML = new XML(e.target.data);
    // do something
}

e.targetにはイベント配布元のURLLoaderさんが格納されているので、
e.target.dataからXMLの内容を受け取る事ができます。
XML関数でXMLオブジェクトにしたら、あとは煮るなり焼くなり好きにしてください。
XMLオブジェクトの美味しい煮方焼き方は下記を参考にしてください。

URLLoaderオブジェクトは、完了時のcompleteの他にも様々なイベントを配信します。
エラー処理等をする場合にはこれらを活用しましょう。

httpStatus
URLLoader.load() を呼び出して HTTP 経由でデータへのアクセスを試みたときに Flash Player がその要求のステータスコードを検出して返すことが可能な環境にある場合に送出されます。(flash.events.HTTPStatusEvent)
ioError
URLLoader.load() の呼び出し時に致命的なエラーが発生してダウンロードが終了した場合に送出されます。(flash.events.IOErrorEvent)
open
URLLoader.load() メソッドの呼び出しによりダウンロード処理が開始されると送出されます。
progress
ダウンロード処理を実行中にデータを受信したときに送出されます。(flash.events.ProgressEvent)

スクリプトをまとめるとこんな感じです。

ActionScript

package{
    import flash.events.<em>;
    import flash.display.</em>;
    import flash.net.*;
    public class main extends Sprite{
        public function main():void{
            var ul:URLLoader = new URLLoader;
            ul.addEventListener(Event.COMPLETE, xmlOnComplete);
            var req:URLRequest = new URLRequest("content.xml");
            ul.load(req);
        }
        public function xmlOnComplete(e:Event):void{
            trace("--load complete--");
            var xml:XML = new XML(e.target.data);
            trace("appls's price : " + xml.items.item.(name=="apple").price);
        }
    }
}

XML

<?xml version="1.0" charset="utf-8" ?>
<data>
    <items>
        <item id="1">
        <name>apple</name>
        <price>1000</price>
    </item>
    <item id="2">
        <name>orange</name>
        <price>1500</price>
    </item>
    <item id="3">
        <name>grape</name>
        <price>2000</price>
    </item>
    </items>
</data>

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*