最近在用到flex 读取xml 的功能,发现flex用法与以前的jsp的习惯差异还是很大,在此总结记录下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <item> <id>item1</id> <value>v1</value> </item> <item> <id>item2</id> <value>v2</value> </item> </root>
方法一:利用<mx:xml>控件读取xml
test.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:XML id="myXml" source="test.xml" /> <mx:ComboBox x="266" y="137" labelField="id" dataProvider="{this.myXml.item}"/> </mx:Application>这里就读取了test.xml文件内容,并为ComboBox控件提供数据。
注:经测试这种方法在编译成swf文件时,已经将xml文件一起打包进swf运行文件了。是一种静态的读取。如果想在动态的读取可以采用下面的as3的读取方式。
方法二:利用as3动态读取xml
flash为了完全,是不允许访问本地文件,所以这里利用as读取的xml的方式也是通过http协议读取,此时要到以下两个 类:
1.URLRequest:一个http请求信息,这里用来建立被读取的xml请求信息。
2.URLLoader:加载(下载)的URLRequest中的信息。
详细代码如下:
test.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.controls.Alert; private function init():void { //创建URLRequest类,用于接收XML信息; var url:URLRequest=new URLRequest("test.xml"); //创建URLLoader类,用于加载XML信息; var loader:URLLoader=new URLLoader(); //加载完成时运行处理xml函数 loader.addEventListener(Event.COMPLETE, dealXml); loader.load(url); } private function dealXml(event:Event):void { var loader:URLLoader=event.target as URLLoader; var myXmlList:XMLList=new XMLList(loader.data); this.testComb.dataProvider=myXmlList.item; this.testComb.labelField="id"; } ]]> </mx:Script> <mx:ComboBox id="testComb" x="266" y="137"/> </mx:Application>