在Flex中需要有关XMLList的帮助

时间:2011-02-18 09:37:58

标签: xml flex actionscript-3 e4x xmllist

我有以下结构的XML,例如

<root>
    <node flag="false"/>
    <node flag="true"/>
    <node flag="false"/>
    <node flag="false"/>
    <node flag="true">
        <node flag="false"/>
        <node flag="true"/>
        <node flag="false"/>
        <node flag="true"/>
    </node>
    <node flag="true"/>
    <node flag="false">
        <node flag="false"/>
        <node flag="true"/>
        <node flag="false"/>
        <node flag="true"/>
    </node>
    <node flag="false"/>
</root>

所有孩子都有名字“节点”。我需要的是获得一个XMLList(或XML,无论如何),具有相同的层次结构,但只包含标志为“true”的节点。

我的例子需要的结果是:

<root>
    <node flag="true"/>
    <node flag="true">
        <node flag="true"/>
        <node flag="true"/>
    </node>
    <node flag="true"/>
</root>

使用e4x有没有很好的方法(没有迭代循环)?我试着做以下事情: xml.node。(@ flag ==“true”),但在这种情况下的结果是:

<root>
        <node flag="true"/>
        <node flag="true">
            <node flag="false"/> <!--need to kill this node-->
            <node flag="true"/>
            <node flag="false"/> <!--need to kill this node-->
            <node flag="true"/>
        </node>
        <node flag="true"/>
    </root>

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

如你所知,e4x中有一个班轮:

xml..node.((@flag=="false") && (delete parent().children()[valueOf().childIndex()]))

它将节点删除到当前XML,因此请注意获取当前XML的副本。

顺便说一句,你应该知道e4x只是在引擎盖下做一个循环,并且一个衬里不会比自定义循环快。

var xml:XML=<root>
    <node id="1" flag="false"/>
    <node id="2" flag="true"/>
    <node id="3" flag="false"/>
    <node id="4" flag="false"/>
    <node id="5" flag="true">
        <node id="5.1" flag="false"/>
        <node id="5.2" flag="true"/>
        <node id="5.3" flag="false"/>
        <node id="5.4" flag="true"/>
    </node>
    <node id="6" flag="true"/>
    <node id="7" flag="false">
        <node id="7.1" flag="false"/>
        <node id="7.2" flag="true"/>
        <node id="7.3" flag="false"/>
        <node id="7.4" flag="true"/>
    </node>
    <node id="8" flag="false"/>
</root>

trace("-- before --")
trace(xml.toXMLString())

xml..node.((@flag=="false") && (delete parent().children()[valueOf().childIndex()])) 

trace("\n-- after --")
trace(xml.toXMLString())

答案 1 :(得分:1)

它没有杀死那些节点,导致你的条件xml.node。(@ flag =“true”)只适用于root的直接子节点,你必须为节点的子节点创建另一个节点