2011-02-02 1 views
1

Как получить ряд элементов из моего xmllist, аналогичный методу slice для массива?Slice XMLList вместо Array

разрез (startIndex, endIndex);

Я пытаюсь что-то вроде этого:

  var tempXMLList:XMLList = new XMLList(); 

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

Но я получаю сообщение об ошибке, что он не может преобразовать originalList [I]

--- Update ---

I использовал функцию Тимофея, и она отлично работала.

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

Используйте e4x.

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

Update:

Там проблема, если вы собираетесь использовать эту функцию после некоторого 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; 
} 

Это самый лучший вариант, я думаю. Конечно, однострочный оператор e4x гораздо более изящный, но, к сожалению, он не может использоваться повторно.

+0

Большое вам спасибо! Perfecto – Bryan

+0

Это мое удовольствие :) –

+0

На самом деле, я получаю странные результаты, когда мой оригинальный xmllist поступает из другого списка, который был отфильтрован. Я думаю, может быть, индекс не обновлен? – Bryan

0

не знаю, как вы ожидаете, что это работает, но вы могли бы перебирать всех детей, и сохранять каждый из них в массив, а затем обрезать их таким образом

+0

Спасибо. Какой был бы правильный синтаксис? Я добавил код выше. – Bryan

 Смежные вопросы

  • Нет связанных вопросов^_^