1

私は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 など) を使用します。さまざまなバージョンのクエリを作成しました。そのうちの1つは次のとおりです。

var i:Number = 2;
var insQuery4a:String = xmlData.game.((@id=="'") + i + ("'")).category.((@categoryNumber=="'") + i + ("'")).(@publish=='pubTrue').word.@wordName[0];

しかし、それらのどれも機能しません...クエリの構文に関する提案はありますか? ありがとう。

4

2 に答える 2

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

編集:

game表示された XML データでノードを使用する必要がないという点で、Patrick は正しいです。<xml>通常、XML データには次のような親ノードがあります。

<xml>
  <game ... >
     rest of XML tree here
  </game>
</xml>

その場合はxmlData.game、ゲーム ノードにジャンプする必要があります。

于 2012-10-18T11:37:32.210 に答える
0

最初は常にルート ノードから開始するため、ここではゲームxmlノードを含める必要はありません。必要なのは、やることだけです ...xmlData.(@id=='1')

したがって、最初のクエリは次のとおりです。

var insQuery4b:String = xmlData.(@id=='1').category.(@categoryNumber=='1').(@publish=='pubTrue').word.@wordName[0];

変数 i の周りに引用符を追加する必要のない 2 番目のクエリでは、関数を使用して比較するためiに変換する必要があります。また、の代わりに型を使用する場合、 2番目の例は次のようになります。StringtoStringiintintNumber

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

PSプレーヤーが暗黙的にキャストを行うため、キャストをStringに強制しなくても機能しますが、明示的なキャストタイプを作成すると便利です。

于 2012-10-18T11:36:23.697 に答える