不明白这个E4X的行为

时间:2011-04-18 07:43:43

标签: flex e4x

我正在尝试获取特定节点的属性值,但却被其行为所困扰。

我在数据提供程序中使用了这个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(),因为元素名称可能是可配置的。

所以问题是,为什么第一个语句有效,但对第一个语句返回的数据使用相同的语句却无法按预期工作?

任何帮助表示赞赏。提前谢谢。

1 个答案:

答案 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()

希望有所帮助