2010-12-02 153 views
8

我想检查每个孩子是否存在此结构中的元素。问题在于孩子们没有相同的名字(产品,预装),我不想改变顺序。另外我不能改变XML结构。as3 xml检查元素是否存在

<items> 
    <product> 
     <resourceImages> 
      <image /> 
     </resourceImages> 
    </product> 
    <product> 
     <resourceImages> 
      <image /> 
     </resourceImages> 
    </product> 
    <prepack> 
     <resourceImages /> 
    </prepack> 
    <product> 
     <resourceImages> 
      <image /> 
     </resourceImages> 
    </product> 
    <prepack> 
     <resourceImages /> 
    </prepack> 
</items> 
+1

哪个元素?也许你想达到的一个例子会更好 – Patrick 2010-12-02 11:44:06

回答

7

是这样的?

for each(var item : XML in xmlData.children()) 
{ 
    var hasImages : Boolean = (item.resourceImages.children().length() > 0); 

    if(hasImages) 
     trace("item has images") 
} 
+0

我改变了这个例子。我需要在for循环中运行这些检查。你能给个例子吗? – chchrist 2010-12-02 13:23:17

+0

你想检查什么元素?图片? – Mattias 2010-12-02 13:25:15

6

也取决于如何是你的第一个循环,但你也可以检查,如果该节点不是undefined

var xml:XML=<items> 
    <product> 
     <resourceImages> 
      <image /> 
     </resourceImages> 
    </product> 
    <product> 
     <resourceImages> 
      <image /> 
     </resourceImages> 
    </product> 
    <prepack> 
     <resourceImages /> 
    </prepack> 
    <product> 
     <resourceImages> 
      <image /> 
      <image /> 
     </resourceImages> 
    </product> 
    <prepack> 
     <resourceImages /> 
    </prepack> 
</items>; 

//loop on all all resourceImage node 
for each (var resourceImageXML:XML in xml..resourceImages){ 
    // and check if node if defined 
    if (resourceImageXML.image != undefined) { 
     // ok node have image 
    } 
} 
10

看来有两种方法,但似乎最好用未定义的检查。

if (item.image.length() > 0) 

OR

if (item.image != undefined) 

但要注意,如果节点存在此结果始终为true不管。

if (item.image) 

考虑到未定义的检查,这很奇怪。