20.7.通过名字查找元素节点

问题
我想通过节点名字来查找元素
解决办法
直接使用E4X 的. 加上属性名语法来查找元素
讨论
E4X 操作XML对象是非常简单的,比如每个元素节点,可直接访问元素名:
+展开
-ActionScript
var fruit:XML = <fruit><name>Apple</name></fruit>;
// 显示: Apple
trace( fruit.name );

看,就是这么简单,用点操作符(.)即可,再看一下更复杂点的例子:
+展开
-ActionScript
var author:XML = <author><name><firstName>Darron</firstName></name></author>;
// 显示: Darron
trace( author.name.firstName );

还有种简便的方法,即使用双点操作符(..)来跳过一级访问,如:
+展开
-ActionScript
var author:XML = <author><name><firstName>Darron</firstName></name></author>;
// 显示: Darron
trace( author..firstName );

当有多个元素节点具有相同名称时,可通过索引值访问,这有点像数组,使用中括号,根据索引值访问指定的元素节点,例如:
+展开
-ActionScript
var items:XML = <items>
<item>
<name>Apple</name>
<color>red</color>
</item>
<item>
<name>Orange</name>
<color>orange</color>
</item>
</items>;
// 显示: Apple
trace( items.item[0].name );
// 显示: Orange
trace( items.item[1].name );

items.item 返回两个元素的XMLList 对象,第一个元素的索引值为0,第二个为1,用length( ) 方法可得到找到的元素节点个数:
+展开
-ActionScript
// 显示: 2
trace( items.item.length( ) );

如果想访问特定名称的元素节点,但又不知道有多少个,可用for each 循环遍历:
+展开
-ActionScript
var items:XML = <items>
<item>
<name>Apple</name>
<color>red</color>
</item>
<item>
<name>Orange</name>
<color>orange</color>
</item>
</items>;
// 使用双点操作符
for each ( var name:XML in items..name ) {
/* 显示:
Apple
Orange
*/

trace( name );
}

也可用[]操作符来访问:
+展开
-ActionScript
var nodeName:String = "color";
var fruit:XML = <fruit><color>red</color></fruit>;
// Displays: red
trace( fruit[nodeName] );

需要注意的是[]操作符不能和双点操作符一起用
+展开
-ActionScript
trace( fruit..[nodeName] ); // 导致编译错误
评论(0)网络
阅读(9)喜欢(0)不喜欢(0)flash/flex/fcs/AIR