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();
}

HTML5飯