2009年7月30日 星期四

將XML轉換成ArrayCollection,就不需辛苦解析XML

撰寫Flash Builder (Flex)系統,其中一個很重要的資料型態,莫過於ArrayCollection,因為他提供很多相當實用的方法,諸如搜尋,排序等等功能,如果資料來源是XML檔案,要怎樣將XML轉換成ArrayCollection呢?假設XML檔案如下:



我們在Flah Builder (Flex)中,可以透過HttpService類別來幫忙

import mx.collections.ArrayCollection;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.mxml.HTTPService;
import mx.controls.Alert


private var myHttpService:HTTPService=new HTTPService


private function ini():void
{

myHttpService.url='../syss.xml'
myHttpService.send();

myHttpService.addEventListener(ResultEvent.RESULT,loaderCompleteHandler);
myHttpService.addEventListener(FaultEvent.FAULT,loaderErrorHandler);
}


private function loaderCompleteHandler(event:ResultEvent):void
{
var tmp:ArrayCollection=event.result.root.data as ArrayCollection

}

private function loaderErrorHandler(event:FaultEvent):void
{
Alert.show('資料載入失敗...')
}


當XML載入成功後,會觸發loaderCompleteHandler函式,這個函式會帶來一個event參數(ResultEvent型態),利用此物件,可透過階層的方式讀取XML的資料,以此為例 event.result.root.data 。回傳回來的資料由debug環境來看,已經自動幫您轉換成ArrayCollection型態物件。


不過有一點需要注意的是,此方法是用於資料數目大於一筆的情況,flex才會自動幫您轉換,如果只有一筆,由debug來監看得知,若只有一筆資料,直接讀取資料即可,程式碼如下:
var myBeginDate:String;
myBeginDate:String =event.result.root.data.活動起日;

所以您可先利用event.result.root.data.length 判斷筆數。

沒有留言:

張貼留言