Domanda

Come avrei ottenuto una gamma di articoli dal mio xmllist simile al metodo della fetta per un array?

slice (startindex, endindex);

Sto provando qualcosa di simile:

            var tempXMLList:XMLList = new XMLList();

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

Ma sto ricevendo un errore che non può convertire l'originalist [i

--- Aggiornare ---

Ho usato la funzione di Timofei e ha funzionato perfettamente.

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

Tuttavia, quando uso un xmllist che è già stato filtrato, si rompe.

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());

produzione

filteredData.length(): 55
start: 0 end: 55
pdata length: 5
È stato utile?

Soluzione

Usa E4X.

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

Aggiornare:

C'è un problema, se hai intenzione di utilizzare questa funzione dopo una certa E4X, perché la funzione ChildIndex () restituisce i vecchi valori degli indici dei nodi e non può essere modificata. Quindi, ho un'altra idea:

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;
}

o solo

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;
}

Questa è la variante migliore, credo. Naturalmente la dichiarazione E4X a una riga è molto più elegante, ma sfortunatamente non è riutilizzabile.

Altri suggerimenti

Non sono sicuro di come ti aspetti che funzioni, ma potresti iterare attraverso tutti i bambini e salvare ognuno in un array, quindi tagliarli in quel modo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top