配列の代わりにxmllistをスライスします
-
28-10-2019 - |
質問
配列のスライスメソッドと同様に、Xmllistからさまざまなアイテムを取得するにはどうすればよいですか?
スライス(startindex、endindex);
私はこのようなことをしています:
var tempXMLList:XMLList = new XMLList();
for( var i:int = startIndex; i <= endIndex; i++){
tempXMLList += originalList[i];
}
しかし、私はそれがOriginallistを変換できないというエラーを受けています[i
- - アップデート - -
Timofeiの機能を使用しましたが、完璧に機能しました。
private function SliceXMLList(xmllist : XMLList, startIndex : int, endIndex : int) : XMLList
{
return xmllist.(childIndex() >= startIndex && childIndex() <= endIndex);
}
ただし、すでにフィルタリングされている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
解決
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].@realIndex = i;
xmllist = xmllist.(@realIndex >= startIndex && @realIndex <= endIndex);
for (i = 0; i < xmllist.length(); i++)
delete xmllist[i].@realIndex;
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;
}
これは最高のバリアントだと思います。もちろん、One-Line E4Xステートメントははるかにエレガントですが、残念ながら再利用できません。
他のヒント
どのように機能するかはわかりませんが、すべての子供を繰り返して、それぞれを配列に保存してから、そのようにトリミングすることができます
所属していません StackOverflow