如何避免由于Flash动作脚本中XML文件缺少元素而导致的错误

如何避免由于Flash动作脚本中XML文件缺少元素而导致的错误,xml,apache-flex,flash,actionscript-3,actionscript,Xml,Apache Flex,Flash,Actionscript 3,Actionscript,我有一个用于读取xml数据的代码。xml文件包含可选值,因此有时元素存在,有时不存在。在这种情况下,如何在ActionScript3.0中为其设置默认值 当我试图跟踪该区域正在跳过的值时。那么,有没有其他方法来追踪元素是否存在 编辑: private function xmlListener(evt:Event) { xmlValue = new XML(evt.target.data); _videoURL = xmlValue.videoUrl; _setWidth

我有一个用于读取xml数据的代码。xml文件包含可选值,因此有时元素存在,有时不存在。在这种情况下,如何在ActionScript3.0中为其设置默认值

当我试图跟踪该区域正在跳过的值时。那么,有没有其他方法来追踪元素是否存在

编辑:

private function xmlListener(evt:Event) {
    xmlValue = new XML(evt.target.data);
    _videoURL = xmlValue.videoUrl;
    _setWidth = xmlValue.setWidth;
    _setHeight = xmlValue.setHeight;
}
假设集合“setHeight”元素不在XML中,那么\u setHeight的值是多少

编辑2:

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

视频.flv
500

尝试访问可能不存在的XML节点时,应尝试使用
XML
类中的
child()
attribute()
element()
函数。其中任何一个都返回一个
XMLList
,如果指定的节点不存在,
XMLList
只是空的(长度
为0),而不是Flash播放器立即发出
错误

发件人:

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

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(@id == '123'));
var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(b == 'Bob'));
var-doc:XML=
你好,鲍勃

你好

; 跟踪(doc.p.(@id='123'));
类似地,下面代码的最后一行生成错误 因为这个函数没有b属性 第二个p元素:

var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(@id == '123'));
var doc:XML = 
            <body>
                <p id='123'>Hello, <b>Bob</b>.</p>
                <p>Hello.</p>
            </body>;
trace(doc.p.(b == 'Bob'));
var-doc:XML=
你好,鲍勃

你好

; 跟踪(doc.p.(b='Bob');
为了避免这些错误,您可以标识具有 通过以下方式匹配属性或元素: 使用属性()和元素() 方法,如以下代码所示:

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'));
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'));
var-doc:XML=
你好,鲍勃

你好

; 跟踪(doc.p.(属性('id')='123'); 跟踪(doc.p.(元素('b')='Bob'));
您还可以使用hasOwnProperty()方法,如 以下代码:

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'));
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'));
var-doc:XML=
你好,鲍勃

你好

; 跟踪(doc.p.(hasOwnProperty('id')&&id='123'); 跟踪(doc.p.(hasOwnProperty('b')&b='Bob');

您是如何处理XML的?E4X?举个XMLThank的例子怎么样?我问了一个问题后意识到我其实并不需要它:-)哦,太多总比太少好。我认为空的东西不起作用,我认为你需要检查未定义的。或者你可以做我在回答中所做的。未定义和null不起作用,你可以通过编写自己的代码进行检查,如果我失败了,这就是为什么出现以下情况:(