6.7 E4X入门简介
到目前为止,ActionScript还没有办法直接处理XML数据,只能把它转换成ArrayCollection,也就是我们刚才所看到的。
E4X(代表ECMAScript for XML)是一种用简化的方式读取和查询XML数据的新兴标准,这种方法无需使用ArrayCollection。
我在本章前面讲过,ArrayCollection会把XML文件的每个结点转换成单独的对象。我们可以通过使用Flex Builder调试功能来看一个这样的示例。
(1) 根据需要,将HTTPService标签中的URL重新改成assets/books.xml。
|
我们可能要给它来个快速的测试以确保一切正常。
(2) 在bookHandler函数的结束大括号那一行,用右键(或按Ctrl键)单击左边缘并选择Toggle Breakpoint(如图6-8所示)。
|
| (点击查看大图)图6-8 断点的放置 |
(3) 通过单击我们一直使用的Run Application按钮右边的Debug按钮,在Debugging模式下运行Flex。
(4) 浏览器打开之后,回到Flex Builder。此时应该会看到一个对话框,它告诉我们它需要切换到Debugging透视图,如图6-9所示。
|
| (点击查看大图)图6-9 Confirm Perspective Switch对话框 |
(5) 单击Yes按钮。
现在我们是在Flex Debugging透视图中。
(6) 在右上角应该会看到Variables视图。双击Variables选项卡将其最大化。
(7) 展开evt分支。它对应的是我们在函数中设置的ResultHandler事件。
(8) 展开evt下面的result分支。
(9) 展开books,然后展开stock。注意这一切都与我们设置函数以及请求XML数据的方式一致(如图6-10所示)。
可以看出,result.books.stock被转换成了ArrayCollection,这个ArrayCollection有10个元素,索引号从0开始,每个元素都是一个Object(Flex使用的类是mx.utils.ObjectProxy)。这与我此前所说的相符。
|
| (点击查看大图)图6-10 Variables视图中呈现的XML数据 |
(10) 若要停止调试,请关闭浏览器。
(11) 双击Variables视图,将它恢复到正常大小。
留在Debugging透视图中。
(12) 前往HTTPService标签并添加属性resultFormat = "e4x"。
|
(13) 再次运行调试器,并回到Variables视图。
现在,当我们像以前那样层级而下时,会看到实际的数据而不是神秘的代码,如图6-11所示。
事实上,请注意ArrayCollection不见了。
当我们使用E4X格式时,Flex不会使用ArrayCollection类。取而代之的是,数据会转换成一种ActionScript固有的格式,这种格式可以轻松地用于查询和显示。
|
| (点击查看大图)图6-11 E4X格式下的Variables视图 |
(14) 如果需要的话,请通过双击Variables选项卡让Variables视图恢复到常规的大小。
(15) 通过单击Debugging视图中的红色方形按钮或关闭浏览器会话(在Mac机上也可以按Cmd+F2键)来结束调试会话。
(16) 回到Development透视图。
(17) 关闭断点。
为了使用E4X格式,我们需要做一些小的修改。首先,变量bookStock的类型不能是ArrayCollection,因为E4X不使用ArrayCollection。
(18) 将变量bookStock的类型改成XMLList。
XMLList是在处理多个XML元素或结点时所使用的类。如果用XML类处理多个对象就会出错。XML类的作用是操作XML文件内的单个元素以及运用新的E4X标准,即我们正在讨论的内容。XML和XMLList之间的差别将在本章后面变得显而易见。
我们通过几个示例来看看E4X是怎么帮助我们的。眼下,我们将使用DataGrid控件来显示数据。
假设我们只想看见书名<name>。
(19) 将函数修改如下:
|
result和name之间的两个点叫做后代访问符。这表示访问与<name>结点相关的任意数据,不管它离根结点有多远。换句话说,我们不需要像以前必须在ActionScript 2.0中所做的那样明确地层级而下地获得数据。
(20) 运行代码,应该会看到一个图书清单。
(21) 如果只想看作者清单,就用author代替name并运行应用程序。
E4X真正的强大之处体现在它能查询基于某个标准的XML数据。举个例子,假设我们只想看到类别为Fiction(这里是区分大小写的)的图书。
(22) 将代码更改如下:
|
注意我们使用了双等号(比较操作符),就像在ActionScript中编写if语句时那样。
(23) 现在运行代码,应该只会看到所请求的图书。
请记住这里是区分大小写的。如果使用的是fiction,得到的结果就为空。
有关E4X语法的方方面面可以写上一整本书。虽然我们还将在本书剩余的章节里讲到这个主题的各个方面,但大家也可以在下面的网址学到更多的知识:
www.ecma-international.org/publications/files/ECMA-ST/Ecma-357.pdf
现在,我们来看看XML数据的另一个方面。
| 回书目 上一节 下一节 |


































