在XSLT实现按日期排序

在XSLT实现按日期排序


作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2004年2月21日 11点47分56秒 


    我们在使用XSLT进行XML转换的时候,经常遇到按XML日期类型的数据进行排序的情况,按照默认的排序规则,很难实现正确的排序效果。虽然最新的MsXML3 SP4提供了3种数据类型的排序方式:

   < xsl:sort 
    
select  = string-expression 
    
data-type  = {  "text" | "number" | Qname }
    order 
= {  "ascending" | "descending" } 
  
/>

但好像仍不能满足我们的需要,下面我们就介绍日期类型数据的排序方法。我们的排序方法是基于下面语句的返回值为true的理论的:

< script  language ="JavaScript" >     alert(Date.parse( " 2004/08/09 " ) == Date.parse( " 2004/8/9 " ))   </ script >

好了,下面就是我们的xsl文件:

SortXML.xsl

<? xml version="1.0" encoding="gb2312" ?>
< xsl:stylesheet  version ="1.0"  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxsl
="urn:schemas-microsoft-com:xslt"  xmlns:user ="http://dotnet.aspx.cc/"
 exclude-result-prefixes
="msxsl user" >
  
< msxsl:script  language ="JavaScript"  implements-prefix ="user" >
    function xmlDateTime(nodelist) {
      return Date.parse(nodelist.replace(/-/g,"/"));
    }
  
</ msxsl:script >
  
< xsl:output  omit-xml-declaration ="yes" />
  
< xsl:template  match ="/" >
    
< xsl:call-template  name ="ItemList" />
  
</ xsl:template >
  
< xsl:template  name ="ItemList" >
    
< table  bgcolor ="snow"  border ="1"  cellpadding ="5"  cellspacing ="2"  borderColor ="darkorange"  style ="font-size:9pt" >
      
< thead >
        
< tr  bgcolor ="" >
          
< th  width ="50%" > 标题 </ th >
          
< th  width ="50%" > 修改时间 </ th >
        
</ tr >
      
</ thead >
      
< tbody >
        
< xsl:for-each  select ="/multistatus/response" >
          
< xsl:sort  order ="descending"  select ="user:xmlDateTime(string(getlastmodified))"  data-type ="number" />
          
< tr >
            
< td >
              
< href ="{href}"  target ="_blank" >
                
< xsl:value-of  select ="Title" />
              
</ a >
            
</ td >
            
< td >
              
< xsl:value-of  select ="getlastmodified" />
            
</ td >
          
</ tr >
        
</ xsl:for-each >
      
</ tbody >
    
</ table >
  
</ xsl:template >
</ xsl:stylesheet >

SortXML.xml

<? xml version="1.0" encoding="GB2312" ?>
<? xml-stylesheet type="text/xsl" href="SortXML.xsl" ?>
< multistatus >
  
< response >
    
< href > http://sz.luohuedu.net/xml/ </ href >
    
< getlastmodified > 2004-8-14 10:51:44 </ getlastmodified >
    
< Title > 【孟宪会之精彩世界】 </ Title >
  
</ response >
  
< response >
    
< href > http://dotnet.aspx.cc/Play.aspx </ href >
    
< getlastmodified > 2004-10-23 11:11:10 </ getlastmodified >
    
< Title > 【孟宪会之精彩世界】音乐频道 </ Title >
  
</ response >
  
< response >
    
< href > http://dotnet.aspx.cc/ </ href >
    
< getlastmodified > 2004-02-10 18:36:19 </ getlastmodified >
    
< Title > 【孟宪会之精彩世界】 </ Title >
  
</ response >
  
< response >
    
< href > http://lucky.myrice.com/ </ href >
    
< getlastmodified > 2004-01-14 10:51:21 </ getlastmodified >
    
< Title > 【孟宪会之精彩世界】 </ Title >
  
</ response >
  
< response >
    
< href > http://dotnet.aspx.cc/ShowList.aspx &amp; id=1 </ href >
    
< getlastmodified > 2003-11-2 10:52:26 </ getlastmodified >
    
< Title > 【孟宪会之精彩世界】ASP.NET </ Title >
  
</ response >
  
< response >
    
< href > http://dotnet.aspx.cc/CoolMenu/main.htm </ href >
    
< getlastmodified > 1999-02-21 22:07:43 </ getlastmodified >
    
< Title > 【孟宪会之精彩世界】DHtml精彩放送 </ Title >
  
</ response >
</ multistatus >


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值