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

本文介绍如何使用XSLT实现XML数据的分页显示,并针对每一列对所有数据进行重新排序的方法。通过先对所有数据排序再进行分页处理,确保排序效果贯穿整个数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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、付费专栏及课程。

余额充值