E4X 增加了 JavaScript 程序语言对 XML 的支持,XML 作为在应用程序和平台之间交换文档和数据的通用方法,得到了广泛认可。这种认可直接使 XML 成为解决共享文档和数据的互操作性问题的有效方法。XML 结构组件的灵活性促成了它强大丰富的功能。E4X 使 XML 的结构组件的使用更加方便,因此大大增加了灵活性。
|
E4X 的目的是简化编写 XML 的 JavaScript 代码,是一个与 XML 节点和属性交互的高效的、强大的工具。E4X 的主要目标是为 JavaScript 开发人员提供一种不依靠文档对象模型(Document Object Model,DOM)处理 XML 文档的简单高效的方法。
JavaScript 语言使用 E4X 实用程序为全局对象传递新属性。反过来,XML 对象的很多属性在 E4X 的序列化和分析函数中是有用的。E4X 重用现有的 JavaScript 运算符(用于 XML 的创建、操作及导航)。
E4X 开发需要的时间很短,而且容易掌握。这些优点可以使读、写操作和相关运算变得简单高效。因此产生的简便性简化了代码编写,方便代码的修改并且缩短了代码的部署周期。另外,灵活敏捷的 E4X 技术是为日益重要的移动应用程序量身定做的。
为了说明 E4X 的功能和灵活性,我将一个音乐目录作为主要输入源,描述处理 XML 数据所使用的主要特征。本文中的大多数的例子基于 清单 1 中的 XML 文档。
清单 1. 用于许多示例的 XML 音乐对象
<mp3> <music genre="classical"> <artist>Ludwig van Beethoven</artist> <song>Fifth Symphony</song> </music> <music genre="jazz"> <artist>Grover Washington, Jr.</artist> <song>The Best Is Yet to Come</song> </music> <music genre="classical"> <artist>Johann Sebastian Bach</artist> <song>Double Concerto in D- for Two Violins</song> </music> <music genre="jazz"> <artist>Dave Brubeck</artist> <song>Take Five</song> <song>Truth Is Fallen</song> </music> <music genre="classical"> <artist>Johannes Brahms</artist> <song>Piano Sonata No. 1 in C major</song> </music> </mp3> |
创建 XML 对象
这个过程的第一步是创建 XML 对象。E4X 提供了一种 XML()
类型,用来存储 XML 元素。在 清单 2 中,使用 JavaScript 开发人员熟悉的格式创建新的 XML 对象。
清单 2. 创建 XML 对象
var xmlMusic = new XML() ; |
XML 对象创建后,就能装载 XML 文档。E4X 有两个首选的方法来创建 XML 对象。第一种方法是创建 XML 对象,然后装载它。如 清单 3 所示。
清单 3. 装载 XML 对象:方法 1
<script type="text/javascript ; e4x=1"> var xmlMusic=new XML() ; xmlMusic = <mp3> <music genre="classical"> <artist>Ludwig van Beethoven</artist> <song>Fifth Symphony</song> </music> <music genre="jazz"> <artist>Grover Washington, Jr.</artist> <song>The Best Is Yet to Come</song> </music> <music genre="classical"> <artist>Johann Sebastian Bach</artist> <song>Double Concerto in D- for Two Violins</song> </music> <music genre="jazz"> <artist>Dave Brubeck</artist> <song>Take Five</song> <song>Truth Is Fallen</song> </music> <music genre="classical"> <artist>Johannes Brahms</artist> <song>Piano Sonata No. 1 in C major</song> </music> </mp3> </script> |
或者在创建 XML 后,将 XML 文档作为一个字符串载入到元素中。如 清单 4 所示。
清单 4. 装载 XML 对象:方法 2
<script type="text/javascript ; e4x=1"> var xmlMusic=new XML('<mp3><music genre="classical"> <artist>Ludwig van Beethoven</artist> <song>Fifth Symphony</song></music> <music genre="jazz"><artist>Grover Washington, Jr.</artist> <song>The Best Is Yet to Come</song> </music><music genre="classical"> <artist>Johann Sebastian Bach</artist> <song>Double Concerto in D- for Two Violins</song></music> <music genre="jazz"><artist>Dave Brubeck</artist> <song>Take Five</song><song>Truth Is Fallen</song> </music><music genre="classical"> <artist>Johannes Brahms</artist> <song>Piano Sonata No. 1 in C major</song> </music></mp3>'); </script> |
注意,表达式 e4x=1
被添加到 script
语句中。E4X 广泛用于将 XML 解析到 JavaScript 对象中。不过,直接使用 XML 语法将会出现问题。如果嵌入到其他基于标记的环境中,会产生一些无法预料的问题。默认情况下,该问题导致 E4X 在火狐浏览器 1.5 版的 HTML 页面中不可用,因为在 HTML 中,它与公认的方法(取消来自不兼容浏览器的脚本)相冲突。为解决这一问题,使用 E4X 时,在表单 type="text/javascript; e4x=1"
的 script
语句中部署一个属性。
尽管 XML 对象表现形式和运行机制与常规 JavaScript 对象相似,但是,这两个对象并不相同。一些 E4X 语法只适用于 E4X XML 对象。JavaScript 开发人员对这些语法是熟悉的,但是 E4X 并不为 XML 到本地 JavaScript 对象的直接映像提供便利。相反,它提供了直接映像的假象(illusion)。