【问题标题】:how to avoid the error due to missing element from an XML file in Flash Action Script如何避免由于 Flash 动作脚本中的 XML 文件中缺少元素而导致的错误
【发布时间】:2010-04-22 17:41:17
【问题描述】:

我有一个用于读取 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 中不存在 set 'setHeight' 元素,那么 _setHeight 的值是多少??

编辑 2:

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

【问题讨论】:

  • 您是如何处理 XML 的? E4X?
  • XML 的例子怎么样
  • 谢谢,我问了之后才意识到我真的不需要它 :-) 哦,太多总比太少好。

标签: xml apache-flex flash actionscript-3 actionscript


【解决方案1】:
_setHeight = (xmlValue.setHeight.length() >0)?xmlValue.setHeight:0;

【讨论】:

    【解决方案2】:

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

    来自Flex Livedocs - Traversing XML structures

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

    var doc:XML = 
                <body>
                    <p id='123'>Hello, <b>Bob</b>.</p>
                    <p>Hello.</p>
                </body>;
    trace(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.(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'));
    

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

    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'));
    

    【讨论】:

      【解决方案3】:
      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;
      }
      

      【讨论】:

      • 我认为 null 的东西不起作用,我认为您需要检查未定义。或者你可以做我在回答中所做的事情
      • undefined 和 null 不起作用,您可以通过编写自己的代码来检查,如果条件我失败了,这就是为什么在这里:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2022-11-23
      相关资源
      最近更新 更多