使用AS3检查XML中是否存在项
因此,我使用AS3提取此XML数据并将其存储为myXML:使用AS3检查XML中是否存在项,xml,actionscript-3,actionscript,find,nodes,Xml,Actionscript 3,Actionscript,Find,Nodes,因此,我使用AS3提取此XML数据并将其存储为myXML: <Questions> <id>1</id> <question> This is question 1. </question> </Questions> <Questions> <id>3</id> <question> This is question 3.
<Questions>
<id>1</id>
<question>
This is question 1.
</question>
</Questions>
<Questions>
<id>3</id>
<question>
This is question 3.
</question>
</Questions>
1.
这是问题1。
3.
这是问题3。
现在我想检查是否在该XML中找到id。我目前正在使用它,但它总是跟踪“未找到”-
for(变量i:Number=1;i<3;i++){
if(myXML.Questions.(@id==i).length()>0){
跟踪(“发现”)
}否则{
跟踪(“未找到”);
}
}
使用此XML,您的问题
在内部应该是一个数组,也就是说,跟踪(myXML.Questions.length())
应该返回大于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");
}
}
for(变量i:Number=1;i<3;i++){
变量b:布尔值=false;
对于(var j:int=0;j不需要循环。Vesper解决方案可行,但在理论上非常昂贵且缓慢。PO也非常接近,但他使用@id,就好像id元素是一个属性一样。解决方案很简单:
var result:XMLList = xml.Questions.(id == 1);
您要么有一个有效的XMLList,要么没有,但仅此而已
也不要使用该代码逻辑:
if(xml.Questions.(id == 1).length() > 0)
它创建了一个不必要的额外xml搜索,因为如果为true,则必须再次调用“xml.Questions.(id==1)”以获取列表。相反,先调用它并存储结果,然后检查长度(如果愿意)。我已经使用AS3/xml有一段时间了,但我认为如果您想查找任何id(无论数字是多少),您都可以尝试:
myXML.Questions.id.length() > 0
至于为什么它总是在代码中找不到跟踪,这是因为@符号它用于属性,而不是元素。因此它试图找到:
<Questions id=1>
...
</Questions>
...
<Questions id=1>
...
</Questions>