E4X用法简要

E4X语法是AS3对ECMAScript标准最前卫的实现,也是目前所有高级编程语言中操作XML最为方便的方式之一。仅仅因为AS3实现了E4X,作为程序员至少也应该了解它一下,因为它是那样的简洁、优雅。

因为AS3实现的是ECMAScript 357 for XML标准(ECMAScript对XML的扩展标准),简称为E4X。自有E4X以来,AS2程序员应该忘掉以前惯用的XMLDocument、 XMLNode、XMLParser 和 XMLTag。在AS3中,操作XML仅需要记住两个类:XML与XMLList。

主要概念:

1) 元素(Element,或称为节点Node):XML 文档中的单个项目,它被标识为开始标签和结束标签之间包含的内容(包括标签)。XML 元素可以包含文本数据或其它元素,也可以为空。

2) 属性 (Attribute):与元素关联的命名值,它以 attributename="value" 格式写入到元
素的开始标签中,而不是编写为嵌套在元素内的单独子元素。

设有如下XML:
var myXML:XML =
    <order>
        <item id='1' author='sban'>
            <menuName>burger</menuName>
            <price>3.95</price>                            <title>as3 expert</title>
        </item>
        <item id='2'>
            <menuName>fries</menuName>
            <price>1.45</price>
        </item>
    </order>;

下面以实例讲解几个主要的E4X操作方法:
1,查找包括指定属性的元素列表
    var items :XMLList = myXML.item.(hasOwnProperty('@author'));
上例代码仅返回第一个item节点。

2,查找指定属性的值为X的元素列表
    var items :XMLList = myXML.item.(@id == 1);
上例代码仅返回第一个item节点。

3,在查找条件中使用并、或、四则运算
var items :XMLList = myXML.item.(@id == 1 || @id == 2);
var items :XMLList = myXML.item.(@id == 1 && @id == 2);
var items :XMLList = myXML.item.(@id >= 1);

4,查找含有指定节点名称的元素列表
    var items :XMLList = myXML.item.(hasOwnProperty('title'));

5,如果有命名空间,在读取元素时必须加命名空间前缀
把用例XML修改为如下:
var myXML:XML =
    <s:order xmlns:s="http://sban.biz/as3-expert">
      <s:item id="1" author="sban">
        <s:menuName>burger</menuName>
        <s:price>3.95</price>
        <s:title>as3 expert</title>
      </s:item>
      <s:item id="2">
        <s:menuName>fries</menuName>
        <s:price>1.45</price>
      </s:item>
    </s:order>;
此时,问题1的答案便为:
var ns :Namespace = new Namespace("s", "http://sban.biz/as3-expert");
var items :XMLList = myXML.ns::item.(hasOwnProperty('@author'));
其它操作与之类似。

6,如何向XMLList中推入一个元素
简单,使用加号:
items += <s:item id="3" xmlns:s="http://sban.biz/as3-expert">
            <s:menuName>gumbo</menuName>
            <s:price>2.45</price>
          </s:item>;

7,如何从XMLList中删除一个元素
删除不能使用减号(why?),须使用delete关键字:
delete items.(@id == 1)[0];
delete不能作用于XMLList对象,操作对象必须是XML。

8,如何在XMLList中指定位置插入XML
先把XMLList包装为XML,然后使用XML的appendChild,prependChild,insertChildAfter,insertChildBefore方法实现。

9,如何获取子子节点列表或属性列表
var items :XMLList = myXML..ns::menuName;
var ids :XMLList = myXML..@id;

你可能感兴趣的:(E4X用法简要)