15.XMLを読み込む

何かとXMLは便利

私の場合、FLASHで何か作ると、データを別ファイルに入れておいて、実行時にそれを読み込む、なんてことが多いです。

ムービーのパラメータを別ファイルのデータで持っておいて、それをいじってSWFでのタイミングを決めたり、位置を決めたり。そうすると、いちいちSWFを作成(コンパイル)しなくてもいいので、楽チンだったりします。

この別ファイルのデータですが、自分ひとりで作っていると、データも好き勝手に並べてても問題ないのですが、XMLにしておくとやっぱりデータを見た時に、どの値がどのデータかわかりやすくていいんです。

ということで、AS3でもXMLを読めると便利だろうな、ということでどうやるのかテストしてみました。

いいサンプルに感謝

今まで(AS2)、XMLを読み込む時ってやたらと苦労しておりました。

多分私が未熟なのかもしれませんが、やたらchildNodesとかfirstChildとか使って、、、

簡単にmy_xml.syohin.priceなんて具合に取り扱えないのかよ?!と思っておりました。

AS3ではどうやってXML読んだらいいのかと思い、調べるとおおお〜、素晴らしいサンプルが書いてるページがありました(参考サイト参照下さい)。

後はimportで必要なのを書けばOK(頭に入ってないと調べるのが面倒ですけどね)。

地味に感動したのが、XMLの階層(って言うのかな)をさらに増やして、

<data>
<drink price="150">
<name>juice</name>
</drink>
<drink price="150">
<name>tea</name>
</drink>
<drink price="350">
<name>beer</name>
<span style="color:maroon;font-weight:bold;"><stock>
<kirin>120</kirin>
<sapporo>50</sapporo>
</stock></span>
</drink>
</data>

なんてしても、myXML.drink[i].stock.kirin で値を得られる!おお〜、感動!

やっぱり、XMLにはそうあって欲しいわけです!

XMLのロード状況

こういうファイルをロードする、となるとお決まりのどのくらい(0〜100%)読み込んだのか?というのを知りたいわけです。

もっとも、画像なんかと違って、XMLだとそれほどサイズは大きくならないので、必要ないのかもしれませんが、、、

一応試したところ、bytesLoadedとbytesTotalでなんとかなるようです。

ただ、読み込む時間よりも、読み込み完了後の処理部分の

var myXML:XML = new XML(myLoader.data);

の部分での方が、時間がかかってそうです。

うーん、やっぱりプリローダー不要だな。もしくは、必要ならこのことを考慮しないとだめかもしれません。

一行で!

ところで、このサンプルにある、

myLoader.load(new URLRequest("test.xml"));

という部分。これって、

var myURL:String = "test.xml";
var myURLRequest:URLRequest= new URLRequest(myURL);
myLoader.load(myURLRequest);

を1行で書いてます。

画像読み込みの時は下のように書いてましたが、こんな風に1行で書けるんですねぇ〜、なんかすごい!

※追記:23.XMLではまった!という関連記事もあります

→16.外部画像をまとめて読み込むクラス

14.外部からSWFを表示←