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.youkuaiyun.com/u/20090927/10/47032cc1-b0ef-4e0d-ab08-5f05a4117570.html