XML の扱い方いろいろ
XML からデータを取り出してどのように処理させるかという処理の実装が、以外と人によって違うんだなぁと最近思い至りまして。
infoObj みたいな Object に一旦情報を移してやる人と、XML のノードをそのまま情報として渡してしまう人がいるのですが、性能的に問題なければ自分は大体後者でやっています。XML ノードを丸ごと渡すことの利点は情報が増えたり XML の内容が変わったときの改修の手間が楽というのと、XML をそのまま情報として保持しているので後でソースを見たときに理解しやすいというのがあります。
以下、写真のスライドショーの処理を例に書いてみました。
// 「一旦情報を移すやり方」
override protected function run():void {
_tUrlLoadThread = new URLLoaderThread(new URLRequest(INFO_XML));
_tUrlLoadThread.start();
_tUrlLoadThread.join();
next(loadedInfo);
}private function loadedInfo() {
var xml:XML = new XML(_tUrlLoadThread.loader.data);
var len:Number = xml.items.item.length();
for (var i:Number = 0; i < len; i++ ) {
// 先にデータを取りだして処理する
var photoInfo:Object = new Object();
photoInfo.url = xml.items.item[i].url;
photoInfo.title = xml.items.item[i].title;
photoInfo.date = xml.items.item[i].@date;
_photoInfoList.push(photo);
}
Main.getInstance().initSlide();
}// 「XML のノードをそのまま情報として渡すやり方」
override protected function run():void {
_tUrlLoadThread = new URLLoaderThread(new URLRequest(INFO_XML));
_tUrlLoadThread.start();
_tUrlLoadThread.join();
next(loadedInfo);
}private function loadedInfo() {
var xml:XML = new XML(_tUrlLoadThread.loader.data);
var len:Number = xml.items.item.length();
for (var i:Number = 0; i < len; i++ ) {
// とりあえず情報をノードごとまるっと渡して処理する
_photoList.push(new Photo(xml.items.item[i]));
}
Main.getInstance().initSlide();
}