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>