[Flash]FAME環境でXML読み込み
FAMEでActionScriptを書こうとすると色々と不便なことがある。
(まだまだ開発されたての環境なので致し方ないが)
さて先日ある案件でXMLデータを読みこんで処理したいといった内容があったのだが、
いかんせん、MacromediaFalshのように簡易的に書くとコンパイルエラーで落ちてしまう。
また、XMLでの検索は面度なのでActionScript用のJSONクラスを用意しても
JSONクラスで落ちてしまう。
結局手書きでやることにした。
作業の流れとしては
- XMLインスタンス作成
- インスタンス.ignoreWhite プロパティをtrueに設定。
- XMLインスタンのonLoadにファンクション設定。
- XMLインスタンスに外部XMLをload
XML.onLoad はLoadが実行され終了されて初めて動作するプロパティです。
さて実際に以下に書いてみましょう。
XMLデータ内容
ActionScript内容
//XMLインスタンス作成
var my_xml :XML = new XML();// 改行などを無視
my_xml.ignoreWhite = true;//onLoadのイベントハンドラにfunctionを設定
my_xml.onLoad =
function(success) {
if (success) {
my_xml = this;
// XMLエレメントの取得
var my_xmlnode :XMLNode = my_xml.firstChild;var name :String = “”;
var url :String = “”;
var i :Number = 0;while ( my_xmlnode.childNodes[i].hasChildNodes() ){
name = my_xmlnode.childNodes[i].childNodes[0].childNodes;
url = my_xmlnode.childNodes[i].childNodes[1].childNodes;
trace ( name );
trace ( url );
i++;
}
}
}//xmlファイルをロード(swfファイルからの相対パスであることに注意
my_xml.load(“data.xml”);
呼び出したデータを配列に入れるなりなんだなりすれば、使いまわしも出来る。
ただ、そうなるとコードが長めになってしまうので、
別関数もしくはクラスとして定義すればいいだろう。
もっとCoolな書き方はあると思うが、
とりあえず動いたのでメモ残し。
諸注意
- タグはhasChildNodes()でfalseを出させるために使用。
- trace()はデバッグ領域に書き出す関数