确定Flex中是否存在XML属性的最佳方法

时间:2020-03-06 14:52:49  来源:igfitidea点击:

我收到来自HTTPService调用的XML响应,并带有e4x结果格式。

<?xml version="1.0" encoding="utf-8"?>
<Validation Error="Invalid Username/Password Combination" />

我试过了:

private function callback(event:ResultEvent):void {
    if(event.result..@Error) {
        // error attr present
    }
    else {
        // error attr not present
    }
}

这似乎不起作用(它总是认为错误属性已退出),什么是最好的方法?谢谢。

编辑:我也试图将属性与null和一个空字符串进行比较,但没有成功...

解决方案

我想出了一个解决方案,如果有更好的方法,我仍然很感兴趣。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

这将起作用:

private function callback(event:ResultEvent):void {
    if(event.result.attribute("Error").length()) {
        // error attr present
    }
    else {
        // error attr not present
    }
}

假设在示例中event.result是一个XML对象,其内容与我们发布的内容完全相同,那么它应该可以工作(由于Validation标记是XML的根标记):

var error:String = event.result.@Error;
if (error != "")
    // error
else
    // no error

上面的示例将假定具有空值的现有Error属性应被视为"无错误"情况,因此,如果我们想知道该属性是否确实存在,则应执行以下操作:

if (event.result.hasOwnProperty("@Error"))
    // error
else
    // no error

我们已找到最佳方法:

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

如果我们不知道属性是否存在,则最好使用attribute方法来获取属性。

我们可以通过以下方式进行检查:

if (undefined == event.result.@Error)

或者动态

if (undefined == event.result.@[attributeName])

请注意,在示例中,两个点将检索所有级别的所有后代,因此我们将获得一个列表。如果没有错误属性,我们将获得一个空列表。这就是为什么它永远不会等于null的原因。

我喜欢这种方法,因为a。)痛苦极简单,b。)Ely Greenfield使用它。 ;)

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

干得好:

if(event.result.@error[0]){
    //exists 
}

容易吗? :)