Я не совсем понимаю, как вам даны данные, но если вы действительно хотите отсортировать XML, я предполагаю, что вам просто нужно написать специальную функцию сортировки.
Если у вас есть объекты или вы можете анализировать их на объекты, вы можете использовать пользовательскую функцию сравнения. Вот функция, которую я использовал для сортировки без учета регистра в коллекции массивов мобильных операторов. Я также использовал его, чтобы пропустить сортировки первого элемента в коллекции массива - CARRIER DEFAULT:
private function x(event:ResultEvent):void{
for(i=0; i<event.result.carriers.carrier.length; i++){
_mobile_carriers.addItem({label:event.result.carriers.carrier[i].name, data:event.result.carriers.carrier[i].id});
}
var sort:Sort = new Sort();
sort.fields = [new SortField("label")];
sort.compareFunction = caseInsensitiveSort;
_mobile_carriers.sort = sort;
_mobile_carriers.addItemAt({label:"Mobile Carrier", data:0},0);
_mobile_carriers.refresh();
}
private function caseInsensitiveSort(obj1:Object, obj2:Object, fields:Array):int{
if(obj1.label == CARRIER_DEFAULT) return -1;
if(obj2.label == CARRIER_DEFAULT) return 1;
return (obj1.label.toLowerCase() < obj2.label.toLowerCase()) ? -1 : 1;
}
Если у вас есть для сортировки строк, перечислить месяцы, а затем вы можете просто сравнить их, как они будут отображаться в целые числа. Там может быть лучший способ сделать это, но в качестве быстрого решения я мог бы собрать хэш:
month_hash=
"JAN" => 1
"FEB" => 2
"MAR" => 3
...
Вот некоторые псевдо-код для сравнения, которые могут быть использованы в пользовательских сравнения кода, или как своего рода функция для Sort()
function compare(s1,s2){
var m1 = ""
var m2 = ""
if (s1 =~ /month="([A-Z]+)"/) m1 = $1;
if (s2 =~ /month="([A-Z]+)"/) m2 = $1;
if(m1 == "" or m2 == ""){
throw exception;
}else{
if(month_hash(m1) > month_hash(m2)){
// string 1's month comes after string 2's month
// return whatever will indicate that
return 1;
}else if(month_hash(m1) < month_hash(m2)){
// string 1's month comes before string 2's month
// return whatever will indicate that
return -1;
}else{
//same month
//return 0
}
}
}
Нет времени, чтобы отправить точный код, но надеюсь, что это поможет!