Flex擷取操作XML示例 些示例示範了FLEX對XML的一般操作 操作符說明:
//使用"."操作符查詢節點,得到第一個子節點,使用"[]"通路指定索引的節點
//使用".."操作符通路所有以該标簽命名的節點,而忽略節點的上下關系
//使用"@"操作符通路節點屬性
代碼段readXml,changeXml有詳細用法 1、XML檔案 檔案一 mybook.xml: <?xml version="1.0" ?>
<books>
<category name="RIA">
<book name="flex tutorial" price="30" author="adobe">
</book>
<book name="air tutorial" price="40" author="adobe">
</book>
</category>
<category name="Java">
<book name="java tutorial" price="50" author="sun">
</book>
</category>
</books> 檔案二 myxml.xml <?xml version="1.0" ?>
<items>
<item>
<name>百度</name>
<url>http://www.baidu.com</url>
<image>assets/baidu.gif</image>
</item>
<item>
<name>新浪</name>
<url>http://www.sina.com</url>
<image>assets/sina.gif</image>
</item>
<item>
<name>開心網</name>
<url>http://www.kaixin001.com</url>
<image>assets/kaixin001.gif</image>
</item>
<item>
<name>QQ郵箱</name>
<url>http://mail.qq.com</url>
<image>assets/qqmail.gif</image>
</item>
<item>
<name>谷歌</name>
<url>http://www.google.com.cn</url>
<image>assets/google.gif</image>
</item>
</items> 2、Flex部分代碼 <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<!--[CDATA[
import mx.collections.XMLListCollection;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
[Bindable]
private var textareaTxt:String = "";
[Bindable]
private var list:ArrayCollection;
[Bindable]
private var xmlList:XMLList;
//-----------------------------------------------------------
// 建立簡單XML部分
//-----------------------------------------------------------
private function varCreateXml():void
{
var myText:String = "測試";
var str:String = "<test><elelment>" + myText + "</elelment></test>";
var testXmlObj:XML = new XML(str);
trace(testXmlObj.toXMLString());
}
//-----------------------------------------------------------
// HttpService部分
//-----------------------------------------------------------
private function httpServiceGetXml():void
{
var httpservice:HTTPService = new HTTPService();
//httpservice.url = "http://localhost:2286/myxml.xml";
httpservice.url = "http://localhost:2286/mybook.xml";
httpservice.useProxy = false;
//httpservice.resultFormat = "array"; //結果要轉換為ArrayCollection應用到List,DataGrid時使用
httpservice.resultFormat = "e4x"; //Tree控件
httpservice.addEventListener(ResultEvent.RESULT,onHttpServiceResultHandler);
httpservice.send();
}
private function onHttpServiceResultHandler(event:ResultEvent):void
{
var strresult:String = event.result.toString();
var externalXML:XML = new XML(strresult);
trace(externalXML.toXMLString());
//轉換XML為ArrayCollection顯示到資料容器中部分, 此時httpService的resultFormat需要為"array"
//list = event.result[0].items.item;
//轉移為XMLListCollection,應用到Tree
xmlList = event.result.category;
}
//-----------------------------------------------------------
// URLLoader部分
//-----------------------------------------------------------
private function urlLoaderGetXml():void
{
var urlLoader:URLLoader = new URLLoader();
var urlRequest:URLRequest = new URLRequest("myxml.xml");
urlLoader.load(urlRequest);
urlLoader.addEventListener(Event.COMPLETE,onUrlLoaderHandler);
}
private function onUrlLoaderHandler(event:Event):void
{
var urlLoader2:URLLoader = event.target as URLLoader;
if(urlLoader2 != null)
{
var externalXML:XML = new XML(urlLoader2.data);
trace(externalXML.toXMLString());
//readXml(externalXML);
//changeXml(externalXML);
}
else
{
trace("urlLoader2 is not a URLLoader!");
}
}
//-----------------------------------------------------------
// 操作XML部分
//-----------------------------------------------------------
private function readXml(xml:XML):void
{
if(xml == null)
return;
/****** ".","[]","..","@" 四個常用的E4X操作符 ******/
//使用"."操作符查詢節點,得到第一個子節點,使用"[]"通路指定索引的節點
writeMsg(xml.item[0]);
//使用".."操作符通路所有以該标簽命名的節點,而忽略節點的上下關系
writeMsg(xml..name);
//使用"@"操作符通路節點屬性
writeMsg(xml.item[0].@name);
writeMsg(xml.item[0].name.@url);
//過濾,隻顯示name為"百度"的節點。屬性和節點都可過濾
writeMsg(xml.item.(name=="百度"));
//修改
writeMsg(xml.item[0].(name="百度一下就知道"));
}
private function changeXml(xml:XML):void
{
if(xml == null)
return;
/****** 修改操作 XML對象包括修改,添加和删除操作******/
//使用insertChildBefore和insertChildAfter方法在某一位置添加元素/節點,appendChild和prependChild方法在最前和最後添加元素/節點
xml.insertChildAfter(xml.item[0],<item name="站點insertChildAfter"/>);
xml.insertChildBefore(xml.item[0],<item name="站點insertChildBefore"/>);
xml.appendChild(<item name="站點appendChild"/>);
xml.prependChild(<item name="站點prependChild"/>);
//writeMsg(xml);
//添加、修改屬性
xml.item[0].@date="20100721";
//writeMsg(xml);
//添加、修改XML對象
xml.item[0].name = "prependChild";
xml.item[0].url = "http://www.prependChild.com";
writeMsg(xml);
writeMsg("============");
//删除節點、屬性等
delete xml.item[0].@date;
delete xml.item[0].name;
delete xml.item[0].url.text()[0];
writeMsg(xml);
}
private function writeMsg(s:String):void
{
txtarea.text += s + "/n";
}
]]-->
</mx:Script>
<mx:Button x="10" y="10" label="變量建立XML" click="varCreateXml()"/>
<mx:Button x="138" y="10" label="HttpService擷取XML" click="httpServiceGetXml()"/>
<mx:Button x="318" y="10" label="UrlLoader擷取XML" click="urlLoaderGetXml()"/>
<mx:TextArea x="10" y="117" id="txtarea" width="387" height="284"/>
<mx:List x="418" y="117" id="dataList" width="188" height="134" dataProvider="{list}"></mx:List>
<mx:DataGrid x="418" y="259" id="dataGrid" width="406" dataProvider="{list}">
<mx:columns>
<mx:DataGridColumn headerText="Column 1" dataField="name"/>
<mx:DataGridColumn headerText="Column 2" dataField="url"/>
<mx:DataGridColumn headerText="Column 3" dataField="image"/>
</mx:columns>
</mx:DataGrid>
<mx:Tree x="625" y="51" width="199" height="200" dataProvider="{xmlList}" labelField="@name"/>
</mx:Application>