如何避免由于Flash Action Script中的XML文件中缺少元素而导致的错误

时间:2010-04-22 17:41:18

标签: xml flex flash actionscript-3 actionscript

我有一个代码,用于读取xml数据。并且xml文件包含可选值,因此有些时候元素存在,有时则不存在。在这种情况下,我如何为动作脚本3.0中的默认值设置。

当我试图追踪该区域正在跳过的值时。那么有任何其他方法来追踪是元素是否存在或不是这样的?

修改

private function xmlListener(evt:Event) {
    xmlValue = new XML(evt.target.data);
    _videoURL = xmlValue.videoUrl;
    _setWidth = xmlValue.setWidth;
    _setHeight = xmlValue.setHeight;
}

假设XML中没有设置' setHeight '元素,那么 _setHeight 的值是什么?

编辑2:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
    <videoUrl>videos.flv</videoUrl>
    <setWidth>500</setWidth>
</settings>

3 个答案:

答案 0 :(得分:1)

_setHeight = (xmlValue.setHeight.length() >0)?xmlValue.setHeight:0;

答案 1 :(得分:0)

尝试访问可能不存在的XML节点时,应尝试使用child()类中的attribute()element()XML函数。其中任何一个都返回XMLList,如果指定的节点不存在,则XMLList只是空的(length为0)而不是Flash Player立即为Error添加var doc:XML = <body> <p id='123'>Hello, <b>Bob</b>.</p> <p>Hello.</p> </body>; trace(doc.p.(@id == '123')); 1}}。

来自Flex Livedocs - Traversing XML structures

  

如果您尝试过滤可能不存在的属性或元素,请参阅Flash®   播放器和Adobe®AIR™将抛出一个   例外。例如,最后一行   以下代码生成一个   错误,因为没有id   第二个p元素中的属性:

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(b == 'Bob'));
     

同样,以下代码的最后一行会产生错误   因为没有b属性   第二个元素:

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(attribute('id') == '123'));
trace(doc.p.(elements('b') == 'Bob'));
     

要避免这些错误,您可以识别具有该属性的属性   匹配属性或元素   使用attribute()和elements()   方法,如下面的代码所示:

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(hasOwnProperty('@id') && @id == '123'));
trace(doc.p.(hasOwnProperty('b') && b == 'Bob'));
     

您也可以使用hasOwnProperty()方法,如   以下代码:

{{1}}

答案 2 :(得分:-1)

if(xmlElement != null){

// do stuff here if it has a set value

}else{
// if it is empty then give it a value like this:

xmlElement = defultvalue;
}