AS3 XML检查元素是否存在

8
我想检查每个子元素中是否存在此结构中的元素。问题在于,子元素没有相同的名称(product、prepack),而且我不想改变它们的顺序。此外,我不能更改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
3个回答

10

看起来有两种方法,但使用 undefined 进行检查似乎更可取。

if (item.image.length() > 0)

或者

if (item.image != undefined)

但要注意,即使节点不存在,这个表达式始终为true。

if (item.image)

考虑到 undefined 检查,这很奇怪。


7
像这样吗?
for each(var item : XML in xmlData.children())
{
    var hasImages : Boolean = (item.resourceImages.children().length() > 0);

    if(hasImages)
        trace("item has images")
}

我已经修改了这个例子。我需要在一个for循环中运行这些检查。你能给个例子吗? - chchrist
你想要检查哪个元素?图片吗? - Mattias
是的,我需要在for循环中检查图像元素是否存在。但是我不知道如何找到length()。 - chchrist

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接