首页 > 开发 > Xml > 正文

19.2.通过E4X语法遍历XML文档

2023-07-12 18:51:56
字体:
来源:转载
供稿:网友
19.2.1 问题
对于一个基于多个字段(attribute)的属性值的XML 文件, 应如何选取其中的节点?
19.2.2. 解决办法
使用E4X 语法的”@”运算符来存取属性, “([])运算符(数组索引)”是用来指示多个子节点之间的关系, 而”.”运算符则用来表示已命名子节点之间的关系。
19.2.3. 讨论
通过E4X, 你可以在子节点的名称后附加一个”.”运算符, 这样你就可以存取XML 文件中特定的子节点。
例如, 从以下的文件中
+展开
-ActionScript
var xml:XML = <foo>
<bar>Hello World</bar>
</foo>

你可以通过以下的方法来存取<bar>的数值:
+展开
-ActionScript
xml.bar

由于<foo>为该XML 对象的根节点, 所以无需对其进行引用。
要存取一个文件中节点的属性, 例如:
+展开
-ActionScript
var xml:XML = <foo>
<bar type="salutation">Hello World</bar>
</foo>

可以使用”@”运算符来指定所需的属性值为一个字段:
+展开
-ActionScript
xml.bar.@type

要存取多个名称相同的子节点, 可以使用”[]”运算符。好像以下的例子:
+展开
-ActionScript
var xml:XML = <foo>
<bar type="salutation">Hello World</bar>
<bar type="salutation">Hola</bar>
<bar type="salutation">Guten Tag</bar>
</foo>

你可以使用以下的方法来存取<bar>系列的第三个对象:
+展开
-ActionScript
xml.bar[2].@type

对于一个用以定义在菜单上项目的简单XML 结构, 可以使用如下的代码段:
+展开
-ActionScript
private var xmlItems:XML = <order>
<item id='1'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>
private var arr:Array;
private function init():void {
arr = new Array();
for each(var xml:XML in xmlItems.item) {
arr.push(Number(xml.@id));
}
}

要对属性值或节点进行测试的话, 可以使用相等运算符(==):
+展开
-ActionScript
trace(xmlItems.item.(@id == "2").menuName);

任何符合条件的节点都会被返回, 否则就会被忽略。以下的例子会把Label 组件的text 属性设置为一个id 等于2 的item 的menuName:
+展开
-XML
<mx:Script>
<![CDATA[
private var xmlItems:XML = <order>
<item id="1">
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id="2">
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>
private function init():void {
xmlLabel.text = xmlItems.item.(@id == "2").menuName;
}

]]>
</mx:Script>
<mx:Label id="xmlLabel"/>

相等(==)跟不等(!=)运算符两者都可以用来测试一个属性或节点的值, 它们可以为字符串或数字, 所返回的结果为一个布朗值。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表