2011-10-03 46 views
0

我有下面的XML:的ActionScript 3 - 解析XML值

<document> 
    <homeitems> 
     <homeitem> 
      <itemURL>URL1.html</itemURL> 
     </homeitem> 
     <homeitem> 
      <itemURL>URL2.html</itemURL> 
     </homeitem> 
     <homeitem> 
      <itemURL>URL3.html</itemURL> 
      <itemImage>image3.jpg</itemImage> 
     </homeitem> 
    </homeitems> 
</document> 

而下面的代碼,將其解析:

var XMLData:XML = new XML(LoaderMax.getContent("xmlDoc")); // loads XML 
var numitems = XMLData.homeitems.homeitem.length(); 

for (var i=0;i<numitems;i++) { 
    if ((XMLData.homeitems.homeitem[i].itemImage) && (XMLData.homeitems.homeitem[i].itemImage!=="")) { 
     trace("Loading image "+XMLData.homeitems.homeitem[i].itemImage); 
    } 
} 

跟蹤結果:

Loading image 
Loading image 
Loading image image3.jpg 

WHY? ?!?它不應該跳過沒有圖像的項目嗎?我是愚蠢的嗎?

回答

1

你可以看到你的測試if (XMLData.homeitems.homeitem[i].itemImage)計算爲true(只是做一個trace(Boolean(XMLData.homeitems.homeitem[i].itemImage)你會看到真正的)這是不夠的。

也不要比作String節點使用節點的toString方法或明確地將它轉換爲String(即String(XMLData.homeitems.homeitem[i].itemImage)!=""XMLData.homeitems.homeitem[i].itemImage.toString()!=""

有多種方式待辦事項它:


您可以測試該節點是不確定的:

if (XMLData.homeitems.homeitem[i].itemImage != undefined) 

使用hasOwnProperty方法:

if (XMLData.homeitems.homeitem[i].hasOwnProperty('itemImage')) 

而且你還可以投你itemImage爲String,看看它是否是!= ""

if (String(XMLData.homeitems.homeitem[i].itemImage) != "") 

使用E4X和foreach你可以有您的循環清潔代碼:

for each(var homeItem:XML in XMLData.homeitems.homeitem) { 
    var itemImage:String = String(homeItem.itemImage) 
    if (itemImage!="") { 
     trace("Loading image "+itemImage); 
    } 
} 
0

,如果你有!=比較不!==

if ((XMLData.homeitems.homeitem[i].itemImage) && (XMLData.homeitems.homeitem[i].itemImage!="")) { 
    /* do somethong here */ 
} 
+0

好吧,但這並沒有改變任何東西。輸出仍然是相同的 –

+0

嘗試'XMLData.homeitems.homeitem [i] .itemImage!= NULL && XMLData.homeitems.homeitem [i] .itemImage!=「」' – Bartek

+0

1120:訪問未定義的屬性NULL,應該是小寫的null ...但仍然沒有變化 - 條件仍然評估爲true –