一 在介绍Flex中操作XML之前,首先简单介绍下XML中的基本术语。  

元素:XML中拥有开始标签和结束标签的这一块称为“元素”   
节点:把XML元素与文本结合起来统称为节点   
根节点: 位于整个XML文当顶端的节点   
文本节点:包含文本的节点   
属性:元素的组成部分,以键/值形式放在元素标签内

用一个例子来说明

view plaincopy to clipboardprint?
<root_node><!--这是一个根节点也 是一个元素-->           
<node attribute="value"><!--这是一个节点也是一个元素,其中包含有属性"attribute"--& gt;            
text node<!--这是一个文本节点-->            
</node>             
</root_node>           
<root_node><!--这是一个根节点也是 一个元素-->   
<node attribute="value"><!--这是一个节点也是一个元素,其中包含有属性"attribute"-->   
text node<!--这是一个文本节点-->   
</node>   
</root_node>  

XML简单介绍完了;之后,将分别介绍XML对象的创建,XML对象的处理以及XML对象的运用。

二 Flex中创建XML对象

Flex中创建XML对象的方法有很多种,可以根据该XML对象的用途来决定使用哪种方法

1.创建一个XML对象,直接把XML文本赋给这个对象

view plaincopy to clipboardprint?
var textXmlObj:XML = <test><element>text</element></test>;
var textXmlObj:XML = <test><element>text</element></test>;

注意:这里等号右边的表达式不用加上引号,因为AS认识它,知道它是一个XML,如果加上引号就成了String类型了,编译也无法通过。

当然也可以动态的决定XML文本中的内容,用"{变量}"的方式插入到XML文本中。

view plaincopy to clipboardprint?
var text_node:String = "text";  
var textXmlObj:XML = <test><element>{text_node}</element></test>;
var text_node:String = "text";
var textXmlObj:XML = <test><element>{text_node}</element></test>;

2.创建一个XML对象,并在构造方法中传入字符串作为XML文本

我们平时在编程工作中,往往会以字符串的方式得到一个XML文本,这个时候就可以使用XML的构造方法来创建一个XML对象。

view plaincopy to clipboardprint?
var myText:String = "text";  
var str:String = "<test><element>"+ myText + "</element></test>";  
var textXmlObj:XML = new XML(str);
var myText:String = "text";
var str:String = "<test><element>"+ myText + "</element></test>";
var textXmlObj:XML = new XML(str);

3.从外部加载XML对象

对于比较大一点的XML文本来说,从外部加载无疑是最好的方式了,因为如果硬写在程序中,就算是对XML对象进行最简单的修改都是一个大灾难。

外部加载这里介绍2种方式

1)如果你不是在Flex中开发而只是在比如Flash CS3中开发的话,可以使用下面的这种方法来加载外部XML

view plaincopy to clipboardprint?
import flash.events.Event;            
import flash.net.URLLoader;           
import flash.net.URLRequest;              
var externalXML:XML;              
var loader:URLLoader = new URLLoader();           
var request:URLRequest = new URLRequest("xmlFile.xml");           
loader.load(request);             
loader.addEventListener(Event.COMPLETE, onComplete);              
function onComplete(event:Event):void             
{             
var loader:URLLoader = event.target as URLLoader;              
if (loader != null)            
{              
externalXML = new XML(loader.data);            
trace(externalXML.toXMLString());              
}              
else           
{              
trace("loader is not a URLLoader!");           
}              
}            
import flash.events.Event;   
import flash.net.URLLoader;   
import flash.net.URLRequest;   
var externalXML:XML;   
var loader:URLLoader = new URLLoader();   
var request:URLRequest = new URLRequest("xmlFile.xml");   
loader.load(request);   
loader.addEventListener(Event.COMPLETE, onComplete);   
function onComplete(event:Event):void   
{   
var loader:URLLoader = event.target as URLLoader;   
if (loader != null)   
{   
externalXML = new XML(loader.data);   
trace(externalXML.toXMLString());   
}   
else   
{   
trace("loader is not a URLLoader!");   
}   
}  

2) 如果是在Flex开发环境中就可以使用HttpService来加载外部的XML;如果这里看不懂代码没关系,后面将细致的介绍下面的这种处理方式

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>                                  
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"                                
creationComplete="unitRPC.send()">                             
<mx:HTTPService >  
<price>30</price>  
<author>奥多比</author>  
</book>  
</books>  
也很简单,修改属性的方法也是一样 

删除元素节点,属性等,使用delete关键字  
view plaincopy to clipboardprint?
delete myXML.book[0].@name;     
delete myXML.book[0].author;     
delete myXML.book[0].price.text()[0];     
trace(myXML);    
delete myXML.book[0].@name;  
delete myXML.book[0].author;  
delete myXML.book[0].price.text()[0];  
trace(myXML); 

输出  
<books>  
<book>    
<price/>    
</book>    
</books>  

相关文章: