要没用过E4X,就不知道用这东西处理XML是多简单好用!过去在Java中一直是用一些用熟了的组件操作XML,这几天用Actionscript才发现了这个好东西,真是相见恨晚啊,一定要和大家分享一下。
1. 从Javascript到E4X
E4X的全称是 ECMAScript for XML。
这里就要先介绍一下ECMAScript,ECMA(欧洲计算机工业协会,European Computer Manufacturers Association)是个标准化组织,JavaScript标准就是由它负责制定的,简单一点说,ECMAScript就是ECMA制定的Javascript标准。
JavaScript作为一个优秀的脚本语言,从最早Netscape公司提交JavaScript给ECMA制定为标准(ECMA-262)至今得到了长足的发展,目前最新版本也是我们用的最广泛的99年末制定的第三版。但大家都知道XML是98年才开始有W3C标准的,对于XML这个刚刚开始窜红的事物,在ECMAScript第三版中并没有对JavaScript操作XML进行任何的规范。没有规范,自然是百花齐放,比如我们用的最多微软的MSXML控件,就是JScript中基于DOM来操作XML的一种方式。这时就要说到Bea了,这个在当年还不怎么入流却独具慧眼的企业,精心开发了一套简单易用的XML操作模型, 正是看到JavaScript标准中这块有空白,在2002年的时候Bea就将这套有非常独到之处的提交给EMCA,作为在Javascript中操作XML的扩展方案,这就是E4X(ECMAScript for XML)。随后在众多厂商参与修缮之后形成了ECMA-357标准,目前最新的是2005年12月制定的第二版。关于这二者的历史及标准的具体内容,可以参考EMCA的资料:
ECMAScript: http://www.ecma-international.org/publications/standards/Ecma-262.htm
E4X: http://www.ecma-international.org/publications/standards/Ecma-357.htm
2. E4X简介
和传统的操作方式比,E4X最大的特点就是语法简单,直观,而且高效。这里不做系统的介绍,只用Actionscript 3 语言举几个简单的例子,给大家一点直观的印象(因为E4X是个标准,在不同语言中的用法基本都是一样的)。
创建XML,直接创建即可:
var x = new XML();
var x = new XML("<root/>");
赋值, 直接把XML代码段(注意不是String对象哦)赋给变量就可以了:
x = <gamescore><username>yourname</username><score>90</score><other><userinfo age="15" gender="man">I am good player</userinfo></other></gamescore>;
子节点, 用操作符点".", ["元素名"]进行操作, 比如:
x.newelement = <newelement/>; //会为<gamescore>添加一个<newelement/>的子节点
x["username"] = "Tom"; //<username>yourname</username>中yourname的变成Tom
x["element" + i ] = i; // i是一个变量
元素属性,用"@"符号代表:
x.@version = "1.0"; //为<gamescore>添加一个属性version,<gamescore version="1.0">
在查询方面,E4X的简单强大体现的十分突出。操作符".."代表当前节点下的所有层次, 通配符"*"代表所有节点,"(条件)"表达式可以对查询的结果用括号中的条件进行过滤等等; 比如:
//查询gamescore所有层次的子节点下属性age的值为15的<userinfo>节点。
var res:XMLList = gamescore..userinfo.( @age == 15 );
//用正则表达式做查询条件
var res:XMLList = gamescore.other.userinfo.( /^[0123456789].*/.test(@age) );
从这几个简单的例子中,可以看到通过直接把XML内容作为操作对象,以及使用 ".", ".." 和 "@" 等便捷的访问操作符,大大的简化了xml操作的复杂度,是我们可以用一种非常直观的方式操作XML, 让那些画蛇添足的封装操作XML的技术都见鬼去吧,我们可以用最直接的方式去操作XML了。
3. E4X现状
前面介绍了E4X是Javascript操作XML的扩展标准,根据EMCA官方网站的介绍,E4X也将在下一个版本中并入ECMAScript。目前来说,Javascript对E4X标准的实现还比较有限,只有部分浏览器的高版本能支持E4X(比如Firefox 1.5以上)。但E4X作为一个优秀操作XML的解决方案,已经被众多新兴的编程语言接受和实现,最典型的便是类似于Javascript的用于Flash编程的Actionscript 3.0。在Java领域,BEA WebLogic 的内建JS引擎,Java 6 内置的脚本引擎 Rhino 也都实现了E4X。毫无疑问,E4X这把XML编程的利器,将会被越来越多的语言、产品支持。