我如何从xmllist获取一系列项目,类似于数组的切片方法?
片(的startIndex,endIndex的);
我正在尝试这样的事情:
var tempXMLList:XMLList = new XMLList();
for( var i:int = startIndex; i <= endIndex; i++){
tempXMLList += originalList[i];
}
但是我收到一个错误,它无法转换原始列表[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
答案 0 :(得分: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].@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;
}
我认为这是最好的变种。当然,单行e4x语句更优雅,但遗憾的是它不可重复使用。
答案 1 :(得分:0)
不确定您希望它如何工作,但您可以遍历所有子节点,并将每个子节点保存到数组中,然后以这种方式修剪它们