AS3 / XML - 如何获取具有值X的特定标记的节点列表

时间:2014-01-23 12:32:09

标签: xml actionscript-3 search e4x

我有一个XML文件,其中包含许多节点:

<animal name="dog">
    ...
    <tag>mammal</tag>
    <tag>brown</tag>
</animal>

我希望将tag节点用作某些动物的搜索功能的一部分。所以我可以整理所有哺乳动物的清单。

我一直在玩这个问题:

myXML..tag=="mammal"myXML.*.tag=="mammal"

还尝试将tag切换为具有属性(例如:<tag type="brown"/>),然后使用类似myXML..tag.@type=="brown"的内容进行搜索,但唉,这两种方法都会追溯到无用的内容,例如“false ”

我并不特别想要遍历每个节点来尝试找到它,因为我有太多需要经常搜索的节点。因此,如果有一些神奇的方式(可能不一定是XML)我可以输入搜索值或标记,并返回具有指定标记的每个animal.@name的列表或数组。

以前有人问过这种情况,但不完全像这样,从来没有真正回答过(我能找到)。

1 个答案:

答案 0 :(得分:0)

试试这个,

var xml:XML = <animal name="dog">               
        <tag type="mammal">mam</tag>
        <tag type="brown">br</tag>                      
        <tag type="black">bl</tag>                      
        <tag type="black">black</tag>
      </animal>;

var attr:String = "black";              
var val:String = "b";
var resultList:XMLList = xml..tag.(@type == attr).(toString().indexOf(val)>-1);

O / P:

<tag type="black">
  bl
</tag>
<tag type="black">
  black
</tag>

无论如何,你总是使用循环来获得更好的性能。e4X Slow。仔细阅读15分。

根据您的评论:

var myXML:XML = <animal name="dog">                                     
                         <tag type="mammal">true</tag>                  
                         <tag type="brown">true</tag>                   
                         <tag type="black">true</tag>                                   
                    </animal>;                  

                for each(var tag:XML in myXML..tag) //no matter of depth Note here
                {
                    if (tag.@type == "mammal") 
                    { 
                        trace(tag.parent().@name); 
                        trace(tag.text()); 
                    } 
                }