E4X中的语法错误

时间:2012-10-18 09:56:33

标签: 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="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];

但是它们不起作用......有关查询语法的任何建议吗? 感谢。

2 个答案:

答案 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函数。 此外,如果iint,则使用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才能跳转到游戏节点。