2011-02-02 24 views
1

配列のスライスメソッドと同様に、xmllistからさまざまな項目を取得するにはどうすればよいですか?配列の代わりにXMLListをスライス

スライス(startIndex、endIndex);私はこのような何かしようとしています

  var tempXMLList:XMLList = new XMLList(); 

      for(var i:int = startIndex; i <= endIndex; i++){ 
       tempXMLList += originalList[i]; 
      } 

をしかし、私はそれがoriginalListを変換することはできませんというエラーを取得しています[i]は

---更新---

I Timofeiの機能を使用し、それは完全に働いた。

ただし、すでにフィルタリングされているxmllistを使用すると、破損します。

filteredData = filteredData.(team == "Ari"); 

trace("filteredData.length(): " + filteredData.length().toString()); 
pData = SliceXMLList(filteredData, startIndex, endIndex); 
trace("start: " + startIndex.toString() + " end: " + endIndex.toString()); 
trace("pdata length: " + pData.length().toString()); 

出力

filteredData.length(): 55 
start: 0 end: 55 
pdata length: 5 

答えて

4

e4xを使用してください。

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList 
{ 
    return xmllist.(childIndex() >= startIndex && childIndex() <= endIndex); 
} 

更新:

あなたには、いくつかのE4Xソートした後、この機能を使用するつもりならば、問題は、あります、インデックス「childIndexに()関数は、ノードの古い値を返す原因」を変更することはできません。

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList 
{ 
    for (var i : int = 0; i < xmllist.length(); i++) 
     xmllist[i][email protected] = i; 
    xmllist = xmllist.(@realIndex >= startIndex && @realIndex <= endIndex); 
    for (i = 0; i < xmllist.length(); i++) 
     delete xmllist[i][email protected]; 
    return xmllist; 
} 

か、単に

private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList 
{ 
    var newXMLList : XMLList = new XMLList(); 
    var currIndex : int = 0; 
    for (var i : int = startIndex; i <= endIndex; i++) 
     newXMLList[currIndex++] = xmllist[i]; 
    return newXMLList; 
} 

これが最良の変異体であるが、私は思う:だから、私は別のアイデアを持っています。もちろん、1行のe4xステートメントははるかにエレガントですが、残念ながら再利用はできません。

+0

ありがとうございました! Perfecto – Bryan

+0

それは私の喜びです:) –

+0

実際には、元のxmllistがフィルタリングされた別のリストから来たとき、私は奇妙な結果を得ています。インデックスが更新されていない可能性がありますか? – Bryan

0

あなたはそれが動作することを期待していますが、すべての子を反復処理し、配列にそれぞれ1を保存し、それらをそのようにトリミングできる方法ではないことを確認

+0

ありがとうございました。正しい構文は何でしょうか?上記のコードを追加しました。 – Bryan

関連する問題