문제

다음과 같은 구조가있는 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 (또는 WATER)를 동일하지만 플래그 "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>
.

아이디어가 있습니까?고맙습니다!

도움이 되었습니까?

해결책

Here a one liner in e4x as you ask :

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

it delete the node to the current XML so pay attention to have a copy of your current XML.

By the way you should know that e4x just do a loop under the hood, and that one liner will not be faster than a custom loop.

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

다른 팁

It didn't kill those nodes, cause your condition xml.node.(@flag="true") works only on the direct children of root, you have to make another one for the children of node

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top