XSLT分页显示XML数据并对所有数据重新排序

关于XSLTXML的介绍就不再多说,这里关注的是如何使用XSLT分页显示XML中的数据,并可以针对每一列对全部数据进行重新排序.

假设有下面的XML数据,需要使用XSLT分页显示XML数据,并可针对每一列对所有数据进行重新排序,应该如何处理呢?

XML数据如下:

 1  <? xml version="1.0" encoding="gb2312" ?>
 2  < AllUsers  xmlns:dt ="urn:schemas-microsoft-com:datatypes" >
 3       < User >
 4           < UserID > 01 </ UserID >
 5           < UserName > OhYeah </ UserName >
 6           < UserEmail > Oh@126.com </ UserEmail >
 7       </ User >
 8       < User >
 9           < UserID > 02 </ UserID >
10           < UserName > 杨过 </ UserName >
11           < UserEmail > yg@21.com </ UserEmail >
12       </ User >
13       < User >
14           < UserID > 03 </ UserID >
15           < UserName > 真宝玉 </ UserName >
16           < UserEmail > xyz@msn.com </ UserEmail >
17       </ User >
18       < User >
19           < UserID > 04 </ UserID >
20           < UserName > 天堂 </ UserName >
21           < UserEmail > tt@163.net </ UserEmail >
22       </ User >
23       < User >
24           < UserID > 05 </ UserID >
25           < UserName > 草原 </ UserName >
26           < UserEmail > yt@sina.com </ UserEmail >
27       </ User >
28  </ AllUsers >
29 
恐怕最容易想到的就是 XSLT 中的 for-each 元素 .
< xsl:param  name ="PageNo" > 1 </ xsl:param >
< xsl:param  name ="FuncName" > goPage </ xsl:param >
< xsl:param  name ="Count" > 4 </ xsl:param >
< table   width ="800"  border ="0"  cellspacing ="2"  cellpadding ="2" >
< tr >
        
< th >< xsl:attribute  name ="onClick" > sortBy('UserID') </ xsl:attribute > RecordNo </ th >
        
< th >< xsl:attribute  name ="onClick" > sortBy(' UserName') </ xsl:attribute > FieldA </ th >
        
< th >< xsl:attribute  name ="onClick" > sortBy(' UserEmail') </ xsl:attribute > Name </ th >
</ tr >
< xsl:for-each  select ="RecordSet[(position() &lt;= $PageNo*$Count) and (position() &gt; (number($PageNo)-1)*$Count)]" >
< xsl:sort  select ="UserID" />
< tr >
 
< td >< xsl:value-of  select ="'UserID'" /></ td >
    
< td >< xsl:value-of  select =" UserName" /></ td >
< td >< xsl:value-of  select =" UserEmail" /></ td >
</ tr >  
</ xsl:for-each >
</ table >

页码数发生变化时,通过JavaScript指定for-each中的$PageNo变量.

重新排序时,通过JavaScript指定sort元素的select属性.

但这里就有一个问题:这里点击列名重新排序时,只是对当前页的数据进行了重新排序(原因是先用for-each取出的当前页的数据,然后才进行排序的),咱们本来的目标应该是对所有数据重新排序的.

       解决这个问题的过程中,孟子E章曾经给我一篇他网站上的文章,解决了这个问题.但网页使用的是VBScript,并且不能正确运行.为此,浪费了不少时间(-_-!!!,太懒了,就希望借用成功的代码,遇到不正确的代码就不愿自己去看.).不过最终总算搞明白了.解决方案就是先用一个XSLT对所有数据重新排序后生成XML,再对重新排序后的XML进行分页操作.

       用于对XML排序并生成XMLXSLT如下:


< xsl:stylesheet  version ="1.0"  xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" >
< xsl:template  match ="Table" >
<? xml version="1.0" encoding="iso-8859-1" ?>
<  AllUsers  >
    
< xsl:for-each  select ="RecordSet" >
    
< xsl:sort  order ="ascending"  data-type ="text"  select ="Name" />
    
< User >
    
< UserID >< xsl:value-of  select ="RecordNo"   /></ UserID >
    
< UserName >< xsl:value-of  select ="FieldA"   /></ UserName >
    
< UserEmail >< xsl:value-of  select ="Name"   /></ UserEmail >
    
</ User >
    
</ xsl:for-each >
</  AllUsers  >
</ xsl:template >
</ xsl:stylesheet >

       其实现在想想也没有什么困难的,只是当时却费了不少心思才搞定.就这些了.有时间把代码挂出来.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值