天天看点

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>

继续阅读