ActionScriptテックラボ

XMLの読み込み

ActionScript3.0になってからはXML関連の操作は驚くほど簡単になりました。

外部ファイルを読み込むには、flash.net.URLLoaderクラスを使います。使い方は簡単で、必要な外部ファイルをセットしたURLRequestを引数としたURLLoaderに渡すだけです。

// XMLの読み込み
xmlLoader.load(new URLRequest('doc.xml'));

読み込んだデータを処理するには、addEventListenerを使って外部ファイルの読み込みが完了した通知を受けられるようにします。

// 読み込まれたら処理するイベントリスナーを登録
xmlLoader.addEventListener(Event.COMPLETE, complateXMLHandler);

上記で、読み込みが完了したらcomplateXMLHandlerが実行されるので、XMLの処理を記述していきます。
たとえば、XMLデータをtraceで出力するには下記のようになります。

function complateXMLHandler(event:Event):void{
trace( new XML(event.target.data) );
}

もう少し丁寧に、不要なイベントリスナーを削除したり、XMLをグローバル変数に代入して利用する場合は下記のようになります。

function complateXMLHandler(event:Event):void{
// メモリの消費を抑えるために、使い終えたイベントリスナーは削除する
xmlLoader.removeEventListener(Event.COMPLETE, complateXMLHandler);
// XMLデータの代入
try{
xml	= new XML(event.target.data);
} catch(e:TypeError){
trace( e.message );
}
trace(xml);
}

次の例では、新しい Loader オブジェクトを作成し、それにXMLファイルへのパスを含むURLRequestオブジェクトを渡します。ロード処理が成功した場合、completeイベントが送出され、XMLファイル内のデータが出力されます。

package {
import flash.display.*;
import flash.events.Event;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.system.LoaderContext;
public class xmlLoadTest extends MovieClip{
// グローバル変数
var xml:XML;
var xmlLoader:URLLoader;
/*-----------------------------------------------------------
コンストラクタ
-----------------------------------------------------------*/
function xmlLoadTest() {
// XMLファイルを読み込むためにURLLoaderオブジェクトを生成
xmlLoader	= new URLLoader();
// 読み込まれたら処理するイベントリスナーを登録
xmlLoader.addEventListener(Event.COMPLETE, complateXMLHandler);
// XMLの読み込み
xmlLoader.load(new URLRequest('doc.xml'));
}
/*-----------------------------------------------------------
XMLファイルの読み込み処理メソッド
-----------------------------------------------------------*/
function complateXMLHandler(event:Event):void{
// メモリの消費を抑えるために、使い終えたイベントリスナーは削除する
xmlLoader.removeEventListener(Event.COMPLETE, complateXMLHandler);
// XMLデータの代入
try{
xml	= new XML(event.target.data);
} catch(e:TypeError){
trace( e.message );
}
trace(xml);
}
}
}

関連記事