2011-10-03 5 views
0

J'ai le code XML suivant:Actionscript 3 - analyse syntaxique des valeurs 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> 

Et le code suivant qui parse il:

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); 
    } 
} 

résultat Trace:

Loading image 
Loading image 
Loading image image3.jpg 

POURQUOI ?! ?!? Ne devrait-il pas sauter les éléments qui n'ont pas d'images? Suis-je stupide?

Répondre

1

Vous pouvez voir que votre test if (XMLData.homeitems.homeitem[i].itemImage) évaluer true (juste un trace(Boolean(XMLData.homeitems.homeitem[i].itemImage) ne vous verrez vrai).

également ne pas comparer un nœud à un String utiliser la méthode toString du nœud ou jeter explicitement à un String (c.-à-String(XMLData.homeitems.homeitem[i].itemImage)!="" ou XMLData.homeitems.homeitem[i].itemImage.toString()!="")

Il y a plusieurs todo façon dont elle:


Vous pouvez tester si le nœud est indéfini:

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

Utilisez la méthode hasOwnProperty:

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

Et vous pouvez aussi jeter votre itemImage à une chaîne et voir si elle est != "":

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

En utilisant e4x et foreach vous pouvez avoir un code plus propre pour votre boucle:

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

Il suffit si vous comparez avec != pas !==

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

Ok, mais cela ne change rien. La sortie est toujours la même –

+0

Essayez 'XMLData.homeitems.homeitem [i] .itemImage! = NULL && XMLData.homeitems.homeitem [i] .itemImage! =" "' – Bartek

+0

1120: L'accès à la propriété indéfinie NULL, aurait dû être en minuscules null ... mais toujours pas de changement - le conditionnel évalue toujours comme vrai –