天天看點

Flex擷取操作XML示例

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>

繼續閱讀