在actionscript中,检查xml节点属性是否存在的最佳方法是什么?

时间:2009-02-25 01:01:34

标签: xml flex flash actionscript-3 properties

如果我有一些像这样的xml:

<books>
    <book title="this is great" hasCover="true" />
    <book title="this is not so great" />
</books>

在针对它编写一些代码之前检查hasCover属性是否存在的actionscript中最好(或接受)的方法是什么?

3 个答案:

答案 0 :(得分:13)

只是为了增加一些精确度。

如果你想检查属性是否存在,即使它是空的,你肯定应该使用hasOwnProperty:

var propertyExists:Boolean = node.hasOwnProperty('@hasCover');

检查内容的长度有点脏,如果属性的值为空,则返回false。您甚至可能会抛出运行时错误,因为如果该属性不存在,您将尝试访问空对象(hasCover)上的属性(长度)。

如果要测试属性是否存在且值已设置,则应尝试以从hasOwnProperty开始,以便在属性的情况下忽略值测试(最终运行时错误)不存在:

var propertyExistsAndContainsValue:Boolean = (node.hasOwnProperty('@hasCover') && node.@hasCover.length());

答案 1 :(得分:6)

好的 - 今天我遇到了这个问题。)它被Ely Greenfield和b使用了。)它很简单,所以我必须将它标记为答案,除非有人可以找到理由不...

if("@property" in node){//do something}

答案 2 :(得分:5)

请参阅question #149206: "Best way to determine whether a XML attribute exists in Flex"

我建议做event.result.hasOwnProperty("@attrName")the answer with the most upvotes(撰写本文时)Theo建议:

event.result.attribute("attrName").length() > 0