作品:Sank Orange's Xslt 分页
版本:1.0.2
更新日期:2006-07-06
下载地址:http://cds.gameres.com/samples/fenye.rar
利用我的XSLT类可以很方便的实现XML数据的分页效果,下面是一个范例。
xslt类的代码在http://blog.csdn.net/cds27/archive/2006/05/08/712546.aspx。
fenye.htm :
<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<TITLE>利用我的XSLT类实现分页范例</TITLE>
<script language="javascript" src="XsltClass.js"></script>
<SCRIPT language="javascript">
var XMLFILE="fenye.xml", XSLFILE="fenye.xsl";
var xslt=new XsltClass(XMLFILE, XSLFILE);//创建对象,传如XML文件名和XSL文件名
function init() {
divContainer.innerHTML=xslt.output();//输出XSLT转换后的HTML
//xslt.setParam("FuncName", "goPage");//设置跳转页面的函数名,默认情况下为"goPage"
//xslt.setParam("Count", 2);//设置每页显示的记录数,默认为2
}
function goPage(pageNo) {
xslt.setParam("PageNo", pageNo);//设置XSL的参数,页号
divContainer.innerHTML=xslt.output();//输出XSLT
}
</SCRIPT>
<style>
body, td, div, span{
font-size: 18px;
}
#divContainer {
margin: 20px;
position: absolute;
left: 10%;
top: 30%;
}
table {
margin: 20px;
border: 1px solid black;
}
</style>
</HEAD>
<BODY onLoad="init();">
<DIV id="divContainer">
</DIV>
</BODY>
</HTML>
fenye.xml:
<?xml-stylesheet type="text/xsl" href="fenye.xsl"?>
<Root>
<Item>
<No>1</No>
<Name>姓名1</Name>
</Item>
<Item>
<No>2</No>
<Name>姓名2</Name>
</Item>
<Item>
<No>3</No>
<Name>姓名3</Name>
</Item>
<Item>
<No>4</No>
<Name>姓名4</Name>
</Item>
<Item>
<No>5</No>
<Name>姓名5</Name>
</Item>
<Item>
<No>6</No>
<Name>姓名6</Name>
</Item>
<Item>
<No>7</No>
<Name>姓名7</Name>
</Item>
</Root>
fenye.xsl:
<xsl:stylesheet version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:param name="PageNo">1</xsl:param>
<xsl:param name="FuncName">goPage</xsl:param>
<xsl:param name="Count">2</xsl:param>
<!--Count表示一页里显示的记录数,默认为2-->
<xsl:template match="/Root">
<xsl:variable name="MaxNo" select="count(Item)"/><!--总记录数-->
<table border="1" align="center">
<tr>
<xsl:for-each select="Item[1]/*">
<th>
<xsl:value-of select="name()"/>
</th>
</xsl:for-each>
</tr>
<!--这段显示列名-->
<xsl:for-each select="Item[(position() <= $PageNo*$Count) and (position() > (number($PageNo)-1)*$Count)]">
<xsl:apply-templates select="."/>
</xsl:for-each>
<!--这段用来显示记录符合条件的记录-->
</table>
<div>
<xsl:call-template name="PrevPage"/>
<!--这段用来显示上一页-->
<xsl:for-each select="Item[position() mod $Count = 1]">
<xsl:variable name="Position" select="position()"/>
<xsl:call-template name="PageLink">
<xsl:with-param name="Position" select="$Position"/>
</xsl:call-template>
</xsl:for-each>
<!--这段用来显示页号-->
<xsl:call-template name="NextPage">
<xsl:with-param name="MaxNo" select="$MaxNo"/>
</xsl:call-template>
<!--这段用来显示下一页-->
</div>
</xsl:template>
<xsl:template match="Item">
<tr>
<td>
<xsl:value-of select="No"/>
</td>
<td>
<xsl:value-of select="Name"/>
</td>
</tr>
</xsl:template>
<xsl:template name="PrevPage"><!-- 上页 -->
<xsl:variable name="Position" select="number($PageNo)-1"/>
<xsl:variable name="Href">javascript:<xsl:value-of select="$FuncName"/>(<xsl:value-of select="$Position"/>);</xsl:variable>
<a>
<xsl:if test="$Position>=1">
<xsl:attribute name="href"><xsl:value-of select="$Href"/></xsl:attribute>
</xsl:if>
上一页
</a>
<xsl:call-template name="Separator"/>
</xsl:template>
<xsl:template name="NextPage"><!-- 下页 -->
<xsl:param name="MaxNo"/>
<xsl:variable name="Position" select="number($PageNo)+1"/>
<xsl:variable name="Href">javascript:<xsl:value-of select="$FuncName"/>(<xsl:value-of select="$Position"/>);</xsl:variable>
<a>
<xsl:if test="(number($Position)-1)*$Count<$MaxNo">
<xsl:attribute name="href"><xsl:value-of select="$Href"/></xsl:attribute>
</xsl:if>
下一页
</a>
</xsl:template>
<xsl:template name="PageLink"><!-- 页号的超链接 -->
<xsl:param name="Position"/>
<xsl:variable name="Href">javascript:<xsl:value-of select="$FuncName"/>(<xsl:value-of select="$Position"/>);</xsl:variable>
<a>
<xsl:if test="$Position!=$PageNo">
<xsl:attribute name="href"><xsl:value-of select="$Href"/></xsl:attribute>
</xsl:if>
第 <xsl:value-of select="position()"/> 页
</a>
<xsl:call-template name="Separator"/>
</xsl:template>
<xsl:template name="Separator"><!-- 页号的分隔符 -->
 | 
</xsl:template>
</xsl:stylesheet>