Flex读取XML文件的两种方法

来源:互联网 发布:集贤县一中网络空间 编辑:程序博客网 时间:2024/04/30 07:28
 

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

 

原创粉丝点击