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

Check if item exists in XML with AS3

所以我使用 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。我目前正在使用它,但它总是跟踪 "NOT FOUND" -

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

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

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");
    }
}

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

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

您要么获得有效的 XMLList,要么没有,仅此而已。

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

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

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

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

myXML.Questions.id.length() > 0

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

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