Xml E4X中的语法错误

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

我正在做一个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>
但是我想在循环中使用它,所以对于这个查询中的数字(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>