Besoin d'aide avec XMllist dans Flex
-
15-11-2019 - |
Question
J'ai XML avec la structure suivante, par exemple
<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>
Tous les enfants ont nommé "noeud".Ce dont j'ai besoin, c'est d'obtenir un xmllist (ou XML, peu importe), avec la même hiérarchie, mais contenant uniquement des nœuds avec le drapeau "vrai".
Le résultat dont j'ai besoin pour mon exemple est:
<root>
<node flag="true"/>
<node flag="true">
<node flag="true"/>
<node flag="true"/>
</node>
<node flag="true"/>
</root>
Y a-t-il une bonne façon de le faire en utilisant E4X (sans itération à travers la boucle)?J'ai essayé de faire ce qui suit: xml.node. (@ drapeau=="vrai"), mais le résultat dans ce cas est:
<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>
Des idées?Merci!
La solution
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())
Autres conseils
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