2010-12-02 154 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) 

考慮到未定義的檢查,這很奇怪。