Apache flex E4X:按月份对XMLList排序?
我尝试按月对XML列表进行排序,实际标记的属性比月份多,但为简洁起见,我将不包括它们:Apache flex E4X:按月份对XMLList排序?,apache-flex,e4x,Apache Flex,E4x,我尝试按月对XML列表进行排序,实际标记的属性比月份多,但为简洁起见,我将不包括它们: <var month="OCT"/> <var month="NOV"/> <var month="JAN"/> <var month="MAR"/> <var month="SEP"/> <var month="JUL"/> <var month="APR"/> <var month="AUG"/> <va
<var month="OCT"/>
<var month="NOV"/>
<var month="JAN"/>
<var month="MAR"/>
<var month="SEP"/>
<var month="JUL"/>
<var month="APR"/>
<var month="AUG"/>
<var month="DEC"/>
<var month="FEB"/>
<var month="MAY"/>
<var month="JUN"/>
我如何按月份对列表进行排序。。。我不是指按字母顺序排列的,我是指一月、二月、三月等
谢谢 我不太清楚您是如何获得数据的,但是如果您必须对XML进行实际排序,我猜您只需要编写一个自定义排序函数 如果您有对象或可以将其解析为对象,则可以使用自定义比较函数。这里有一个函数,我用来对移动运营商的数组集合进行不区分大小写的排序。我还使用它跳过对数组集合中的第一个元素进行排序-CARRIER默认值:
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;
}
下面是一些用于比较的伪代码,可以在自定义比较代码中使用,也可以用作sort()的排序函数
功能比较(s1、s2){
var m1=“”
var m2=“”
如果(s1=~/month=“([A-Z]+)”/)m1=$1;
如果(s2=~/month=“([A-Z]+)”/)m2=$1;
如果(m1==”或m2==”){
抛出异常;
}否则{
如果(月份散列(m1)>月份散列(m2)){
//字符串1的月份在字符串2的月份之后
//返回任何能表明这一点的内容
返回1;
}否则如果(月份散列(m1)<月份散列(m2)){
//字符串1的月份在字符串2的月份之前
//返回任何能表明这一点的内容
返回-1;
}否则{
//同月
//返回0
}
}
}
没有时间发布准确的代码,但希望这有帮助 今天早上我想出了这个解决方案:
function sortXMLListByMonth(xmlList:XMLList):XMLList
{
var months:Array = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'];
var xml:XML = new XML(<temp></temp>);
for(var i:uint = 0; i<months.length; i++)
{
var tmp:XMLList = xmlList.(@month == months[i]);
xml.appendChild(tmp);
}
return xml.children();
}
函数sortXMLListByMonth(xmlList:xmlList):xmlList
{
变量月份:数组=['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];
var xml:xml=new xml();
对于(变量i:uint=0;i
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
}
}
}
function sortXMLListByMonth(xmlList:XMLList):XMLList
{
var months:Array = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'];
var xml:XML = new XML(<temp></temp>);
for(var i:uint = 0; i<months.length; i++)
{
var tmp:XMLList = xmlList.(@month == months[i]);
xml.appendChild(tmp);
}
return xml.children();
}