使用 AS3 检查项目是不是存在于 XML 中

Posted

技术标签:

【中文标题】使用 AS3 检查项目是不是存在于 XML 中【英文标题】: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");
    

【问题讨论】:

【参考方案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");
    

【讨论】:

以上是关于使用 AS3 检查项目是不是存在于 XML 中的主要内容,如果未能解决你的问题,请参考以下文章

如何检查元素是不是存在于一组项目中?

如何检查一个项目是不是存在于动态数组中?

如何检查项目是不是存在于多个数组中

通过 jquery 检查项目是不是存在于特定的 <td> 中

Flutter & Firebase:如何检查某个项目是不是存在于 Firebase 文档中的数组中

检查图像是不是存在于我的本地资源中