我正在做一个Flash项目,我正在尝试使用for循环从这个xml树中检索信息:
<game playGame="true" name="peopleNames" id="1">
<category publish="pubTrue" categoryName="guys" categoryNumber="1">
<word wordName="ross"/>
<word wordName="chandler"/>
<word wordName="joey"/>
</category>
<category publish="pubTrue" categoryName="girls" categoryNumber="2">
<word wordName="rachel"/>
<word wordName="monica"/>
<word wordName="phoebe"/>
</category>
</game>
我写了这个查询来检索数据:
var insQuery4b:String = xmlData.game.(@id=='1').category.(@categoryNumber=='1').(@publish=='pubTrue').word.@wordName[0];
但是我想在一个循环中使用它,所以对于这个查询中的数字(1,0),我将使用循环的索引(例如,i)。我编写了不同版本的查询,其中一个是:
var i:Number = 2;
var insQuery4a:String = xmlData.game.((@id=="'") + i + ("'")).category.((@categoryNumber=="'") + i + ("'")).(@publish=='pubTrue').word.@wordName[0];
但是它们不起作用......有关查询语法的任何建议吗? 感谢。
答案 0 :(得分:0)
首先xml
总是从根节点开始,所以在这里你不必包含游戏节点,你只有todo xmlData.(@id=='1')
... < / p>
所以第一个查询是:
var insQuery4b:String = xmlData.(@id=='1').category.(@categoryNumber=='1').(@publish=='pubTrue').word.@wordName[0];
对于第二个查询,您不必在变量i周围添加引号,您希望将i
转换为String
以进行比较,并使用toString
函数。
此外,如果i
为int
,则使用int
类型而不是Number
你的第二个例子可能是:
var i:int = 2;
var insQuery4a:String = xmlData.(@id==i.toString()).category.(@categoryNumber==i.toString()).(@publish=='pubTrue').word.@wordName[0];
实例: http://wonderfl.net/c/ltN2
P.S。 它也可以在不强制转换为String的情况下工作,因为玩家将隐式执行它,但是制作显式转换类型很好。
答案 1 :(得分:0)
语法比这更容易,你不需要乱用那些花哨的引号......只需使用:
var i:uint = 2;
var insQuery4b:String = xmlData.(@id==1).category.(@categoryNumber==i).(@publish=='pubTrue').word.@wordName[0];
trace(insQuery4b);
//output: rachel
//the loop (for example)
var l:uint = xmlData.(@id==1).category.length();
for(i=1; i<=l ;i++)
trace(xmlData.(@id==1).category.(@categoryNumber==i).(@publish=='pubTrue').word.@wordName[0]);
//ouput:
//ross
///rachel
编辑:
Patrick是正确的,因为您不需要将game
节点与您向我们展示的XML数据一起使用。通常,XML数据具有父节点<xml>
,如下所示:
<xml>
<game ... >
rest of XML tree here
</game>
</xml>
在这种情况下,您需要xmlData.game
才能跳转到游戏节点。