Flex讀取XML文件的兩種方法

 

Flex讀取XML文件主要通過以下兩種方式:

(1) 通過HTTPService
(2) 通過URLLoader

代碼如下:

mxml代碼

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
   <![CDATA[
    import mx.collections.ArrayCollection;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.http.HTTPService;
 
    public const xmlUrl:String = "config.xml";
    [Bindable] private var colors1:ArrayCollection;
    [Bindable] private var colors2:XML;
 
    private function init():void{
     //方法一:通過HTTPService
     var service:HTTPService = new HTTPService();
     service.url = xmlUrl;
     service.addEventListener(ResultEvent.RESULT, resultHandler);
     service.send();
   
     //方法二:通過URLLoader
     var request:URLRequest = new URLRequest(xmlUrl);
     var loader:URLLoader = new URLLoader(request);
     loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);
    }
 
    private function resultHandler(event:ResultEvent):void{
     colors1 = event.result.colors.color;
    }
 
    private function loaderCompleteHandler(event:Event):void{
     colors2 = new XML(event.target.data);
    }
   ]]>
</mx:Script>
<mx:List x="100" y="150" dataProvider="{colors1}" labelField="name">
</mx:List>
<mx:List x="300" y="150" dataProvider="{colors2.color}" labelField="@name">
</mx:List>
</mx:Application>


config.xml文件

<colors>
<color name="LightGrey" value="#D3D3D3"/>
<color name="Silver" value="#C0C0C0"/>
<color name="DarkGray" value="#A9A9A9"/>
<color name="Gray" value="#808080"/>
<color name="DimGray" value="#696969"/>
<color name="Black" value="#000000"/>
</colors>

注:注意兩種方式返回結果的差異

 

==================================================

Flex可以很方便的將XML映射爲對象,但是它有一個問題,如果我們定義了複數個相同的tag的話,它可以將其映射爲ArrayCollection,如果Tag只有一條的話,它會將其映射爲ObjectProxy。

所以比較加判斷:

if(event.result.employee.student is ObjectProxy){
                DataArray.addItem(event.result.employee.student);
        }else{
                DataArray = event.result.employee.student as ArrayCollection;
        }

上文例子
  if(event.result.colors.color is ObjectProxy){ 
    colors1 = new ArrayCollection([event.result.colors.color]);
   //colors1.addItem(event.result.colors.color); 
  }else{ 
  colors1 = event.result.colors.color as ArrayCollection; 
  } 

無數據時也要判斷

 

http://www.cxybl.com/html/flex/2011_0612_696.html

http://topic.csdn.net/u/20090927/10/47032cc1-b0ef-4e0d-ab08-5f05a4117570.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章