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