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

AS2.0で外部データとしてXMLを使おうとすると、意外とめんどくさいのよね。
ファイル読み込んで、ちくちくXMLの階層移動しながらObjectに変換したりとか。

その辺を全てCASAが肩代わりしてくれて超便利。
個人的にかなり良く使うし、簡単なのでまずはこれから。

(いろんな人が解説されてて既出すぎるのは気のせい)

Actionscript:
  1. import org.casaframework.load.data.xml.XmlLoad;
  2. import org.casaframework.util.XmlUtil;
  3.  
  4. var _xmlLoad:XmlLoad;
  5. var obj:Object;
  6.  
  7. function loadXML() {
  8.  
  9. //XmlLoadのインスタンスを作りつつ、XMLファイルのパスを指定
  10. _xmlLoad = new XmlLoad("data.xml");
  11.  
  12. //ロード完了時のイベント登録 ※1
  13. _xmlLoad.addEventObserver( this, XmlLoad.EVENT_LOAD_COMPLETE, "onLoadComplete");
  14.  
  15. //読み込み開始
  16. _xmlLoad.start();
  17. }
  18.  
  19. //ロード完了時にこれが呼ばれます。
  20. function onLoadComplete() {
  21.  
  22. //XmlUtilを使って、XMLデータをオブジェクトに変換
  23. obj = XmlUtil.xmlToObject( _xmlLoad.getXml() );
  24. }
  25.  
  26. loadXML();

かんたん、かんたん。

※1のとこはCASAのEventDispatcherで、要になるところ。
ListenerじゃなくてObserverなところに注意、最初結構とまどった。
第1引数で、イベント発動時に呼び出す関数のスコープを指定。
第2引数で、発動イベントを指定(この場合はXMLのロードが完了したときに発動)
第3引数で、イベント発動時に呼び出す関数をStringで指定。
というわけで、XMLのロードが完了したら自動的にonLoadCompleteが呼び出されるわけですよ。

ロード完了以外にパース完了とか、パースエラーだとか、ロード中のプログレスだったりとかいろいろイベントあるので、くわしくはドキュメントを読むよろし。
自分は手抜きなのでロード完了以外ほとんど使った事がありませぬ。

で、ロード完了したらxmlLoadからXML取得して、XmlUtilのxmlToObjectにぶち込むとオブジェクトに変換されて返ってくるわけです。
中身はちょいとややこしい感じがするけど、慣れの問題。
自分でXMLの中身をたどっていく事を考えたらめちゃんこ楽。

基本はノード名→配列→属性名 or nodeValue

XML:
  1. <data>
  2. <hoge>こんにちは</hoge>
  3. <hoge>さようなら</hoge>
  4. <hage>
  5. <boke title="ぼけ"></boke>
  6. </hage>
  7. </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が手放せなくなったわけでございます。

そんな感じ。

Leave a reply