1

我如何从我的 xmllist 中获取一系列项目,类似于数组的 slice 方法?

切片(开始索引,结束索引);

我正在尝试这样的事情:

            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
4

2 回答 2

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 语句要优雅得多,但不幸的是它不能重用。

于 2011-02-02T22:22:42.220 回答
0

不确定你期望它如何工作,但你可以遍历所有孩子,并将每个孩子保存到一个数组中,然后以这种方式修剪它们

于 2011-02-02T22:05:29.370 回答