Xml E4X中的语法错误
我正在做一个Flash项目,在这个项目中,我试图使用for循环从这个xml树中检索信息:Xml E4X中的语法错误,xml,actionscript-3,flash,e4x,Xml,Actionscript 3,Flash,E4x,我正在做一个Flash项目,在这个项目中,我试图使用for循环从这个xml树中检索信息: <game playGame="true" name="peopleNames" id="1"> <category publish="pubTrue" categoryName="guys" categoryNumber="1"> <word wordName="ross"/> <word wordName="chand
<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>
但是我想在循环中使用它,所以对于这个查询中的数字(1,0),我将使用循环的索引(例如,I)。我编写了不同版本的查询,其中之一是:
var i:Number = 2;
var insQuery4a:String = xmlData.game.((@id=="'") + i + ("'")).category.((@categoryNumber=="'") + i + ("'")).(@publish=='pubTrue').word.@wordName[0];
但是没有一个是有效的。。。对查询的语法有什么建议吗?
谢谢。首先,
xml
总是从根节点开始,所以这里不必包含游戏节点,您只需执行xmlData。(@id='1')
因此,第一个查询是:
var insQuery4b:String = xmlData.(@id=='1').category.(@categoryNumber=='1').(@publish=='pubTrue').word.@wordName[0];
对于第二个查询,您不必在变量i周围添加引号,您需要将i
转换为字符串
,以便使用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];
实例:
附言。
它也可以在不强制强制强制转换为字符串的情况下工作,因为播放器会隐式地执行此操作,但创建显式转换类型很好。语法比这更简单,您不需要乱用那些花哨的引号。。。只需使用:
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
在这种情况下,您需要
xmlData.game
跳到游戏节点。这很容易,但e4x对我来说是新的,所以。。。非常感谢,到目前为止效果很好!如果有正确的答案,你应该接受
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
<xml>
<game ... >
rest of XML tree here
</game>
</xml>