我正在尝试获取特定节点的属性值,但却被其行为所困扰。
我在数据提供程序中使用了这个XML:
<items>
<item>
<code>ITEM1</code>
<groups>
<group>
<code>GROUP1</code>
<props>
<prop>
<code>PROP1</code>
</prop>
<prop>
<code>PROP2</code>
</prop>
</props>
</group>
</groups>
</item>
<!-- Lots more items, each item has a variable number of groups and props -->
</items>
现在,这段代码:
var itemData:XMLList = dataProvider..elements("item").(code == "ITEM1");
成功返回第一个<item>
。
接下来,我做:
var groupData:XMLList = itemData..elements("group").(code == "GROUP1")
但不有效。 groupData.length() == 0
如果我放弃elements()
,那么它可以工作:
var groupData:XMLList = itemData..group.(code == "GROUP1")
但我需要使用elements(),因为元素名称可能是可配置的。
所以问题是,为什么第一个语句有效,但对第一个语句返回的数据使用相同的语句却无法按预期工作?
任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:1)
因为组是组的内部元素而不是项目的直接子项 第二个陈述是有效的,因为它本质上是递归的
尝试以下代码
var itemData:XMLList = xml..elements("item").(code == "ITEM1");
//Alert.show(itemData.toXMLString());
var groupsData:XMLList = itemData..elements("groups");
//Alert.show(groupsData.toXMLString());
var groupData:XMLList = groupsData..elements("group").(code == "GROUP1")
//Alert.show(groupData.toXMLString());
您可以启用Altert以查看表达结果
EDITED元素功能的详细信息可以在 AS3 XML elements()
希望有所帮助