?
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