对xml+xsl实现分页排序的改进,使支持对所有数据进行排序
以往见过的利用xml+xsl来实现分页排序的基本都只能本页内排序,究其原因,简单分析如下:
xml+xsl分页原理:在xsl中,遍历节点的时候,可以获取当前节点的位置,而且还能限制显示特定位置的节点,例如有18条记录,可以在xsl中设置只显示第1-6条,也可以设置只显示第7-12条,再配合客户端脚本,就可以动态改变xsl文档中控制显示指定位置节点的属性,从而实现分页(具体见代码)。不过这个有一点就是在xsl中获取的这个位置信息是xml文档中的节点位置,而不是排序后的位置;
同样xml+xsl实现排序原理:xsl可以按照节点的属性来排序,我们可以通过动态改变xsl的相关属性值来达到动态排序的目的。
如果两个合起来用,却只能对当前页进行排序。
参考例子:
http://www.gaofan.com/web/sailflying/version2/learn/pages.xml
http://www.gaofan.com/web/sailflying/version2/learn/pages.xsl
http://www.gaofan.com/web/sailflying/version2/learn/paixu.xml
http://www.gaofan.com/web/sailflying/version2/learn/paixu.xsl
http://lucky.myrice.com/xml/xpath.html
我不知道有没有方法可以在xsl中先排序然后判断位置,不过我倒是由此想到了一个解决方法——xsl不仅可以和xml生成html,同样,也可以利用xml+xsl来生成新的xml,所以直接用一个单独的xsl来实现排序,然后和原来的xml生成一个新的排序后的xml,再利用这个排序xml来分页,就可以实现对全部数据进行排序而非当前页内的数据排序。
懒得重头写,直接把孟宪会之精彩世界上的一个分页例子拿来一改就OK了。
注:ID为SortData的数据岛即为xml排序的xsl,ID为temp的数据岛为排序后的新xml。
客户关系表
<客户关系表 xmlns:dt="urn:schemas-microsoft-com:datatypes">
<客户><序号 dt:dt="int">01序号><姓名>dotey姓名><电子邮件>http://www.webuc.net电子邮件>客户>
<客户><序号 dt:dt="int">02序号><姓名>孟子E章姓名><电子邮件>mengxianhui@21cn.com电子邮件>客户>
<客户><序号 dt:dt="int">03序号><姓名>宝玉姓名><电子邮件>junminliu@msn.com电子邮件>客户>
<客户><序号 dt:dt="int">04序号><姓名>http://lucky.myrice.com姓名><电子邮件>Karry@163.net电子邮件>客户>
<客户><序号 dt:dt="int">05序号><姓名>http://colorweb.go.163.com姓名><电子邮件>vivki@sina.com电子邮件>客户>
<客户><序号 dt:dt="int">06序号><姓名>Frank姓名><电子邮件>net_lover@mengxianhui.com.cn电子邮件>客户>
<客户><序号 dt:dt="int">07序号><姓名>Greg姓名><电子邮件>meng@mengxianhui.com电子邮件>客户>
<客户><序号 dt:dt="int">08序号><姓名>Harry姓名><电子邮件>sunny@xianhui.net电子邮件>客户>
<客户><序号 dt:dt="int">09序号><姓名>Ingrid姓名><电子邮件>cathy@hotmail.com电子邮件>客户>
<客户><序号 dt:dt="int">10序号><姓名>Jeff姓名><电子邮件>your@mxh.com电子邮件>客户>
<客户><序号 dt:dt="int">11序号><姓名>Kelly姓名><电子邮件>Iloveyou@mengxianhui.com电子邮件>客户>
<客户><序号 dt:dt="int">12序号><姓名>Larry姓名><电子邮件>smilling@mengxianhui.com电子邮件>客户>
<客户><序号 dt:dt="int">13序号><姓名>Mark姓名><电子邮件>money@21cn.com电子邮件>客户>
<客户><序号 dt:dt="int">14序号><姓名>Nancy姓名><电子邮件>www@yahoo.com电子邮件>客户>
<客户><序号 dt:dt="int">15序号><姓名>Peter姓名><电子邮件>dotnet@aol.com电子邮件>客户>
<客户><序号 dt:dt="int">16序号><姓名>Rachel姓名><电子邮件>billgates@microsoft.com电子邮件>客户>
<客户><序号 dt:dt="int">17序号><姓名>Seth姓名><电子邮件>flying@yous.net电子邮件>客户>
<客户><序号 dt:dt="int">18序号><姓名>Tim姓名><电子邮件>agooyboy@lovegirl.com电子邮件>客户>
客户关系表>
<客户关系表>
<客户>
<序号>序号>
<姓名>姓名>
<电子邮件>电子邮件>
客户>
客户关系表>