我有以下结构的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>
有什么想法吗?谢谢!
答案 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的直接子节点,你必须为节点的子节点创建另一个节点