0

例如,我有具有以下结构的 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>

有任何想法吗?谢谢!

4

2 回答 2

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())
于 2011-02-18T11:00:18.710 回答
1

它没有杀死那些节点,因为您的条件 xml.node.(@flag="true") 仅适用于 root 的直接子节点,您必须为节点的子节点创建另一个

于 2011-02-18T09:42:20.853 回答