2011-10-03 91 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 –