【问题标题】:Check if item exists in XML with AS3使用 AS3 检查项目是否存在于 XML 中
【发布时间】:2015-08-27 04:01:55
【问题描述】:

所以我正在使用 AS3 提取这些 XML 数据并将其存储为 myXML:

<Questions>
    <id>1</id>
    <question>
    This is question 1.
    </question>
</Questions>
<Questions>
    <id>3</id>
    <question>
    This is question 3.
    </question>
</Questions>

现在我想检查是否在该 XML 中找到了一个 id。我目前正在使用它,但它总是跟踪“未找到”-

for (var i: Number = 1; i < 3; i++) {
    if (myXML.Questions.(@id == i).length() > 0) {
        trace("FOUND")
    } else {
        trace("NOT FOUND");
    }
}

【问题讨论】:

    标签: xml actionscript-3 actionscript find nodes


    【解决方案1】:

    我使用 AS3/XML 已经有一段时间了,但我想如果你想找到 any id(不管数字多少),你可以试试:

    myXML.Questions.id.length() > 0
    

    至于为什么它总是在您的代码中跟踪 NOT FOUND,这是因为 @ 符号用于属性,而不是元素。所以它试图找到:

    <Questions id=1>
        ...
    </Questions>
    

    【讨论】:

      【解决方案2】:

      不需要循环。 Vesper 解决方案可行,但理论上非常昂贵且速度慢。 PO 也非常接近,但他使用 @id 就好像 id 元素是一个属性。解决方法很简单:

      var result:XMLList = xml.Questions.(id == 1);
      

      您要么得到一个有效的 XMLList,要么没有,但仅此而已。

      也不要使用那个代码逻辑:

      if(xml.Questions.(id == 1).length() > 0)
      

      它会创建一个不必要的额外 xml 搜索,因为如果为真,您将不得不再次调用“xml.Questions.(id == 1)”来获取列表。而是先调用它并存储结果,然后根据需要检查长度。

      【讨论】:

        【解决方案3】:

        有了这个 XML,你的 Questions 应该是一个内部数组,也就是说,trace(myXML.Questions.length()) 应该返回大于 1,所以你要遍历 myXML.Questions 并检查节点的 id 是否等于你的 @ 987654325@.

        for (var i: Number = 1; i < 3; i++) {
            var b:Boolean=false;
            for (var j:int=0;j<myXML.Questions.length();j++) {
                if (myXML.Questions[j].id==i) b=true;
            }
            if (b){
                trace(i,"FOUND")
            } else {
                trace(i,"NOT FOUND");
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-02-12
          • 1970-01-01
          • 2015-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-08
          • 2013-05-09
          相关资源
          最近更新 更多