一个XSL 翻页例子入门
2009-07-26 16:56 闫妍 阅读(195) 评论(0) 编辑 收藏 举报<?xml version="1.0" encoding="gb2312"?>
<!--由于 XSL 样式表本身也是一个 XML 文档,因此它总是由 XML 声明起始:-->
<!-- XSL 样式表的根元素 <xsl:stylesheet>,定义此文档是一个
XSLT 样式表文档(连同版本号和 XSLT 命名空间属性)。 -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!--声明局部或全局参数。-->
<!--注释:如果在模板内声明参数,就是局部参数,如果作为顶层元素来声明,就是全局参数。-->
<xsl:param name="size" select="4"/>
<!--模板:当某个指定的节点被匹配时所应用的规则。 这里是AllProSaleD-->
<!--match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。
match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。-->
<xsl:template match="AllProSaleD">
<!-- <xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。 -->
<!-- XPath谓语表示 除Size变量 余数为1的Record节点时候应用模板 -->
<xsl:apply-templates select="record[position() mod $size = 1]">
<!--传递给模板的参数的值-->
<!--<xsl:with-param> 元素定义了传递给模板的参数的值。
注释:<xsl:with-param> 元素的 name 属性的值必须与 <xsl:param> 元素中的 name 相匹配,否则将忽略 <xsl:with-param> 元素,。
注释:<xsl:call-template> 和 <xsl:apply-templates> 中均允许使用 <xsl:with-param> 元素。
-->
<!-- XPath谓语表示 所有Record 除以 Size 的结果 最小整数3.14 等于4 -->
<xsl:with-param name="pages" select="ceiling(count(record) div $size)"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="record">
<!--模板参数-->
<xsl:param name="pages"/>
<!-- 定义常量 --><!--如果 select 属性含有文字字符串,则必须给字符串加引号。-->
<!-- 返回当前正在被处理的节点的 index 位置。 每次调用都会重新计算赋值给page -->
<xsl:variable name="page" select="position()"/>
<div id='content{$page}' style="display:'none'" title="content{$page}">
<h2>报表2</h2>
<table border="1" width="100%" cellpadding="0" cellspacing="0" >
<tr bgcolor="#9acd32" color="#ffffff" >
<th align="left">产品名称</th>
<th align="left">产品售价</th>
<th align="left">本金</th>
<th align="left">销售数量</th>
<th align="left">销售时间</th>
<th align="left">经销商</th>
<th align="left">收入</th>
</tr>
<!-- <xsl:for-each> 元素允许您在 XSLT 中进行循环。 -->
<!-- select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。 -->
<!-- 轴:所有自己本身(如果是Record) 以及 轴:后面的兄弟节点【谓词-后面的Size个兄弟】(也就是后面的Size个兄弟和他自己) -->
<xsl:for-each select="self::record | following-sibling::record[position() < $size]">
<tr>
<td>
<!-- <xsl:value-of> 元素用于提取某个选定节点的值,并把值添加到转换的输出流中:-->
<!-- select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。-->
<xsl:value-of select="productName"/>
</td>
<td>
<xsl:value-of select="proPrice"/>
</td>
<td>
<xsl:value-of select="proPrincipal"/>
</td>
<td>
<xsl:value-of select="saleNumber"/>
</td>
<td>
<xsl:value-of select="saleDate"/>
</td>
<td>
<xsl:value-of select="Del"/>
</td>
<td>
<xsl:value-of select="Income"/>
</td>
</tr>
</xsl:for-each>
</table>
<div id="navBar">
<!-- <xsl:choose> 元素用于结合 <xsl:when> 和 <xsl:otherwise> 来表达多重条件测试。 -->
<xsl:choose>
<!-- 一共就一页 -->
<xsl:when test="$pages = 1">
第<xsl:value-of select="$page" />页---
共有<xsl:value-of select="$pages" />页---
</xsl:when>
<!-- 第一页时 -->
<xsl:when test="$page = 1">
第<xsl:value-of select="$page" />页---
<a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
共有<xsl:value-of select="$pages" />页---
</xsl:when>
<!-- 最后一页时 -->
<xsl:when test="$page = $pages">
第<xsl:value-of select="$page" />页---
<a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
共有<xsl:value-of select="$pages" />页---
</xsl:when>
<!-- 条件都不是得情况 -->
<xsl:otherwise>
第<xsl:value-of select="$page" />页---
<a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
<a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
共有<xsl:value-of select="$pages" />页---
</xsl:otherwise>
</xsl:choose>
</div>
</div>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="demo.xsl"?>
<AllProSaleD>
<record id="1">
<productName name="产品名称">光学相机1500</productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="2">
<productName name="产品名称"> [延保]数码\光学相机1500 </productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="3">
<productName name="产品名称"> [延保]数码\光学相机1500 </productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="1">
<productName name="产品名称">光学相机1500</productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="2">
<productName name="产品名称"> [延保]数码\光学相机1500 </productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="3">
<productName name="产品名称"> [延保]数码\光学相机1500 </productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="1">
<productName name="产品名称">光学相机1500</productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="2">
<productName name="产品名称"> [延保]数码\光学相机1500 </productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="3">
<productName name="产品名称"> [延保]数码\光学相机1500 </productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="1">
<productName name="产品名称">光学相机1500</productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="2">
<productName name="产品名称"> [延保]数码\光学相机1500 </productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
<record id="3">
<productName name="产品名称"> [延保]数码\光学相机1500 </productName>
<proPrice name="产品售价">100.00</proPrice>
<proPrincipal name="本金">20.00</proPrincipal>
<saleNumber name="销售数量">67</saleNumber>
<saleDate name="销售时间">2009-6-25 9:00</saleDate>
<Del name="经销商">美晨</Del>
<Income name="收入">112</Income>
</record>
</AllProSaleD>