是否可以对XMLList进行排序?我能在上面找到的所有示例都创建了一个新的XMLListCollection,如下所示:
MyXMLListCol = new XMLListCollection(MyXMLList);我不认为本例中的XMLListCollection引用了XMLList,所以对它进行排序会使我的XMLList无法排序,对吗?
如何直接对XMLList进行排序?
谢谢~迈克
发布于 2009-12-11 05:43:52
所以我最终修改了我的搜索词,实际上我给出了一个答案。使用我在这里学到的技术:http://freerpad.blogspot.com/2007/07/more-hierarchical-sorting-e4x-xml-for.html
我想出了这个:
public function sortXMLListByAttribute(parentNode:XML,xList:XMLList,attr:String):void{
//attr values must be ints
var xListItems:int = xList.length();
if(xListItems !=0){
var sortingArray:Array = new Array();
var sortAttr:Number = new Number();
for each (var item:XML in xList){
sortAttr = Number(item.attribute(attr));
if(sortingArray.indexOf(sortAttr)==-1){
sortingArray.push(sortAttr);
}
//piggy back the removal, just have to remove all of one localName without touching items of other localNames
delete parentNode.child(item.localName())[0];
}
if( sortingArray.length > 1 ) {
sortingArray.sort(Array.NUMERIC);
}
var sortedList:XMLList = new XMLList();
for each(var sortedAttr:Number in sortingArray){
for each (var item2:XML in xList){
var tempVar:Number = Number(item2.attribute(attr));
if(tempVar == sortedAttr){
sortedList += item2
}
}
}
for each(var item3:XML in sortedList){
parentNode.appendChild(item3);
}
}
}运行速度非常快,并使我的原始XML变量保持更新。我知道我可能为了不使用XMLListCollection而重复发明轮子,但我认为对XML和XMLLists进行排序的能力可能非常重要。
发布于 2009-12-10 13:57:49
虽然没有与Array.sortOn函数等效的本机函数,但它足够简单,可以实现您自己的排序算法:
// Bubble sort.
// always initialize variables -- it save memory.
var ordered:Boolean = false;
var l:int = xmlList.length();
var i:int = 0;
var curr:XML = null;
var plus:XML = null;
while( !ordered )
{
// Assume that the order is correct
ordered = true;
for( i = 0; i < l; i++ )
{
curr = xmlList[ i ];
plus = xmlList[ i + 1 ];
// If the order is incorrect, swap and set ordered to false.
if( Number( curr.@order ) < Number( plus.@order ) )
{
xmlList[ i ] = plus;
xmlList[ i + 1 ] = curr;
ordered = false;
}
}
}但是,实际上,使用XMLListCollection要容易得多,错误也少得多。此外,如果其他人正在阅读您的代码,他们会发现更容易理解。请帮你自己一个忙,避免在这件事上重复发明轮子。
https://stackoverflow.com/questions/1869964
复制相似问题