Actionscript 3 - анализ значений XML - PullRequest
0 голосов
/ 03 октября 2011

У меня есть следующий 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

ПОЧЕМУ?!?!? Разве это не должно пропускать предметы, у которых нет изображений? Я тупой?

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Вы можете видеть, что ваш тест if (XMLData.homeitems.homeitem[i].itemImage) оценивается как true (просто введите trace(Boolean(XMLData.homeitems.homeitem[i].itemImage), и вы увидите true).

Также не сравнивайте узел с 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 голосов
/ 03 октября 2011

Достаточно, если вы сравните с !=, а не !==

if ((XMLData.homeitems.homeitem[i].itemImage) && (XMLData.homeitems.homeitem[i].itemImage!="")) { 
    /* do somethong here */ 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...