这个XSLT是否正确?

时间:2011-11-18 06:54:41

标签: xslt

我找到了一个允许我在网站上实现上一个/下一个导航的脚本,但我不确定它是否正确。

<?xml version="1.0"?>
 <xsl:stylesheet version="1.0"   
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="html" version="3.2" encoding="ISO-8859-1"/>
 <xsl:param name="Page" select="0" />
 <xsl:param name="PageSize" select="1" />

<xsl:template name="results" match="/">


<xsl:variable name="mycount" select="count(root/customer)"/>
<xsl:variable name="selectedRowCount" select="floor((number($numberOfRecords)-1) div 
$recordsPerPage)+1"/>


  <xsl:for-each select="root/customer">
   <!-- Pagination logic -->
   <xsl:if test="position() &gt;= ($Page * $PageSize) + 1">
    <xsl:if test="position() &lt;= $PageSize + ($PageSize * $Page)">


     <!-- Do display here -->

    </xsl:if>
   </xsl:if>
  </xsl:for-each>


  <!-- Prev link for pagination -->
  <xsl:choose>
   <xsl:when test="number($Page)-1 &gt;= 0">&#160;
    <A>
     <xsl:attribute name="href">_dirresult?page=<xsl:value-of select="number($Page)-
     1"/>&amp;pagesize=<xsl:value-of select="$PageSize"/></xsl:attribute>
      &lt;&lt;Prev
    </A>
   </xsl:when>
   <xsl:otherwise>
    <!-- display something else -->
   </xsl:otherwise>
  </xsl:choose>

  <xsl:if test="$selectedRowCount &gt; 1">
   &#160;<b class="blacktext"><xsl:value-of select="number($Page)+1"/>&#160;of&#160;<xsl:value-of select="number($selectedRowCount)"/></b>&#160;
  </xsl:if>

  <!-- Next link for pagination -->
  <xsl:choose>
   <xsl:when test="number($Page)+1 &lt; number($selectedRowCount)">&#160;
    <A>
     <xsl:attribute name="href">_dirresult?page=<xsl:value-of select="number($Page)             
     +1"/>&amp;pagesize=<xsl:value-of select="$PageSize"/></xsl:attribute>
      Next&gt;&gt;
    </A>
   </xsl:when>
   <xsl:otherwise>
    <!-- display something else -->
   </xsl:otherwise>
  </xsl:choose>
</xsl:template>
</xsl:stylesheet>

这个脚本是否正确?据我所知,当你在第1页第1条时,永远不会达到“在这里显示”。

1 个答案:

答案 0 :(得分:2)

找出它是否有效的方法是尝试一下!

您需要做的第一件事是修复一些错误。这个变量声明完全错误,因为它引用了另外两个不存在的变量

<xsl:variable name="selectedRowCount" 
   select="floor((number($numberOfRecords)-1) div  $recordsPerPage)+1"/>

$ numberOfRecords 应该是 mycount ,而 $ recordsPerPage 应该是 $ PageSize

从XSLT看,它需要一个 Customer 元素列表,如此......

<root>
   <customer>Bob 1</customer>
   <customer>Bob 2</customer>
   <customer>Bob 3</customer>
</root>

自己尝试过,看起来确实有效,但请记住它假设页面编号从0开始,而不是1,所以如果要显示第一页,请设置 $ Page 参数为0.不要惊慌,它会在输出中显示第1页......

所以,试一试,看看你是怎么过的......