### Flex与XML操作详解
#### 一、E4X与ActionScript 3.0的集成
E4X(ECMAScript for XML)是ECMAScript标准的一个扩展,它被引入到ActionScript 3.0中,极大地简化了XML数据处理的过程。在Flash 5时,ActionScript首次引入了一些XML处理能力,但在当时这些能力非常有限。随着ECMAScript标准的不断发展,特别是ECMA-262版本的发布,ActionScript 3.0采用了E4X规范,从而提供了更为强大的XML处理功能。
在ActionScript 3.0中,处理XML的方式有了显著的变化。与之前的ActionScript 2.0相比,不再使用XML类进行数据解析,而是引入了一系列新的类来支持XML处理,包括`XML`, `XMLNode`, `XMLParser`, `XMLTag`等,这些类都位于`flash.xml`包下。这意味着开发者可以更加方便地创建、解析、遍历和修改XML文档。
#### 二、XML的创建与解析
在ActionScript 3.0中,可以直接通过变量声明来创建XML对象:
```actionscript
var myXML:XML = <order>
<itemid='1'>
<menuName>burger</menuName>
<price>3.95</price>
</itemid>
<itemid='2'>
<menuName>fries</menuName>
<price>1.45</price>
</itemid>
</order>;
```
此外,也可以通过`new XML()`构造函数来创建一个XML实例:
```actionscript
var myXML:XML = new XML("<order><itemid='1'><menuName>burger</menuName><price>3.95</price></item></order>");
```
如果需要动态创建XML元素,可以使用模板字符串:
```actionscript
var tagname:String = "item";
var attributename:String = "id";
var attributevalue:String = "5";
var content:String = "Chicken";
var x:XML = <{tagname} {attributename}="{attributevalue}">{content}</{tagname}>;
trace(x.toXMLString());
// Output: <item id="5">Chicken</item>
```
对于从外部源加载XML数据的需求,例如WebService或RSS feed,可以通过以下方式实现:
```actionscript
var myXML:XML = new XML();
var XML_URL:String = "http://www.example.com/Sample3.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(evtObj:Event):void {
var myXML:XML = XML(myLoader.data);
trace("Data loaded.");
}
```
#### 三、XML数据的查询与修改
E4X使得在ActionScript 3.0中查询和修改XML数据变得更加直观和简洁。使用点符号`.`和属性符号`@`可以直接访问和修改XML节点及其属性:
```actionscript
// 获取第一个item的menuName值
trace(myXML.item[0].menuName); // Output: burger
// 获取第一个item的id值
trace(myXML.item[0].@id); // Output: 1
// 获取id为2的item的menuName值
trace(myXML.item.(@id == "2").menuName); // Output: fries
// 获取menuName为burger的item的price值
trace(myXML.item.(menuName == "burger").price); // Output: 3.95
```
此外,还可以使用`appendChild()`方法向XML文档中添加新的元素:
```actionscript
var newItem:XML = <itemid="3">
<menuName>mediumcola</menuName>
<price>1.25</price>
</itemid>;
myXML.appendChild(newItem);
```
可以使用属性符号`@.`来修改XML节点的内容:
```actionscript
myXML.item[0].menuName = "regularburger";
myXML.item[1].menuName = "smallfries";
myXML.item[2].menuName = "mediumcola";
```
通过这种方式,E4X为ActionScript 3.0中的XML处理提供了强大而灵活的支持,使得开发人员能够更高效地处理XML数据。