E4X:ECMAScript for XML


「ECMAScript for XML」简称 E4X,是 JavaScript 的一个标准扩展,它为处理 XML 文档定义了一系列强大的特性,Spidermonkey 1.5 和 Rhino 1.6 已经支持 E4X。由于多数浏览器还未支持 E4X,所以 E4X 被认为是一种基于 SpidermonkeyRhino 引擎的服务端技术。

E4X 将 XML 文档看作一个 XML 对象,将 XML 片段看作一个紧密相关的 XML 列表对象。对 XML 对象执行 typeof 运算的结果是 xml。本节将介绍创建和使用 XML 对象的一些方法,但仅限于快速入门,更多细节可以参考官方文档

我们可以通过 XML 标签直接量来创建 XML 对象:

var pt = <periodictable>
    <element id="1"><name>Hydrogen</name></element>
    <element id="2"><name>Helium</name></element>
    <element id="3"><name>Lithium</name></element>
</periodictable>;

// 给这个 XML 对象新增一个元素
pt.element += <element id="4"><name>Beryllium</name></element>;

可以通过花括号在 XML 中嵌入 JavaScript 表达式:

pt = <periodictable></periodictable>;
var elements = ['Hydrogen', 'Helium', 'Lithium'];
for (var n = 0; n < elements.length; n++) {
    pt.element += <element id="{n+1}"><name>{elements[n]}</name></element>
}

除了通过直接量外,还可以通过对象的方式增加一个新元素:

pt.element = new XML('<element id="5"><name>Boron</name></element>');

还可以通过 XMLList() 一次添加多个元素:

pt.element = new XMLList('<element id="6"><name>Carbon</name></element>' +
                    '<element id="7"><name>Nitrogen</name></element>');

访问 XML 元素也很简单:

var elements = pt.element;
var names = pt.element.name;
var name = names[0];

此外,还支持后代运算符(..)和通配符方式访问:

var names2 = pt..name;
var names3 = pt.element.*;

上面两种方式和 pt.element.name 返回结果一致。

E4X中使用@来区分属性名和标签名(从XPath中借鉴):

var atomicNumber = pt.element[1].@id;

还支持通过通配符来获取所有属性:

var attributes = pt.element[1].*;

E4X 甚至还支持通过以下语法对列表进行过滤:

var lightElements = pt.element.(@id < 3)
var bElementNames = pt.element.(name.charAt(0) == 'B').name;

我们可以通过 for/each 对 XML 进行遍历:

for each (var e in pt.element)
    console.log(e.name);
    
for each (var n in pt.element.@*)
    console.log(n);

E4X 表达式可以出现在赋值表达式的左侧,从而支持对 XML 的标签和属性进行修改:

pt.element[1].name = 'XXX';
pt.element[1].@id = 20;

delete 运算符可用于删除 XML 中的标签和属性:

delete pt.element[7].@id;
delete pt.element[7];

点赞 取消点赞 收藏 取消收藏

<< 上一篇: 函数简写与多 catch 语句

>> 下一篇: 用 Rhino 脚本化 Java