【CASA】CASAで超楽チンにXMLを使う

AS2.0で外部データとしてXMLを使おうとすると、意外とめんどくさいのよね。
ファイル読み込んで、ちくちくXMLの階層移動しながらObjectに変換したりとか。
その辺を全てCASAが肩代わりしてくれて超便利。
個人的にかなり良く使うし、簡単なのでまずはこれから。
(いろんな人が解説されてて既出すぎるのは気のせい)
-
import org.casaframework.load.data.xml.XmlLoad;
-
import org.casaframework.util.XmlUtil;
-
-
var _xmlLoad:XmlLoad;
-
var obj:Object;
-
-
function loadXML() {
-
-
//XmlLoadのインスタンスを作りつつ、XMLファイルのパスを指定
-
_xmlLoad = new XmlLoad("data.xml");
-
-
//ロード完了時のイベント登録 ※1
-
_xmlLoad.addEventObserver( this, XmlLoad.EVENT_LOAD_COMPLETE, "onLoadComplete");
-
-
//読み込み開始
-
_xmlLoad.start();
-
}
-
-
//ロード完了時にこれが呼ばれます。
-
function onLoadComplete() {
-
-
//XmlUtilを使って、XMLデータをオブジェクトに変換
-
obj = XmlUtil.xmlToObject( _xmlLoad.getXml() );
-
}
-
-
loadXML();
かんたん、かんたん。
※1のとこはCASAのEventDispatcherで、要になるところ。
ListenerじゃなくてObserverなところに注意、最初結構とまどった。
第1引数で、イベント発動時に呼び出す関数のスコープを指定。
第2引数で、発動イベントを指定(この場合はXMLのロードが完了したときに発動)
第3引数で、イベント発動時に呼び出す関数をStringで指定。
というわけで、XMLのロードが完了したら自動的にonLoadCompleteが呼び出されるわけですよ。
ロード完了以外にパース完了とか、パースエラーだとか、ロード中のプログレスだったりとかいろいろイベントあるので、くわしくはドキュメントを読むよろし。
自分は手抜きなのでロード完了以外ほとんど使った事がありませぬ。
で、ロード完了したらxmlLoadからXML取得して、XmlUtilのxmlToObjectにぶち込むとオブジェクトに変換されて返ってくるわけです。
中身はちょいとややこしい感じがするけど、慣れの問題。
自分でXMLの中身をたどっていく事を考えたらめちゃんこ楽。
基本はノード名→配列→属性名 or nodeValue
-
<data>
-
<hoge>こんにちは</hoge>
-
<hoge>さようなら</hoge>
-
<hage>
-
<boke title="ぼけ"></boke>
-
</hage>
-
</data>
こんなデータがあったとすると
obj["data"][0]["hoge"][1].src で"hoge1.jpg"がとれる
obj["data"][0]["hoge"][1].nodeValue で"こんにちは"がとれる
obj["data"][0]["hage"][0]["boke"][0].title で"ぼけ"がとれる
らくちんですね。
最近作るFlashはXML読み込むものがほとんどなので、こいつのおかげですっかりCASAが手放せなくなったわけでございます。
そんな感じ。