确定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 }
容易吗? :)