Re: [newbie]use of xsl:if {RE: XSL to handle display mutiple pages}

Subject: Re: [newbie]use of xsl:if {RE: XSL to handle display mutiple pages}
From: Mike Brown <mike@xxxxxxxx>
Date: Fri, 3 Nov 2000 13:23:52 -0400 (EST)
Xu, Xiaocun wrote:
>   I started working on XSL to handle display mutiple pages in HTML.  The
> idea I tried was simple, count number of records until max records per page
> reaches.  At that time, I close of the current page/table, add a page break
> and start the next page/table.  But such logic seems does not seems to be
> allowed in xsl blocks such as xsl:if.  What can be done to get around this
> problem?
>   Following is the XSL code I currently have problem with:
> <xsl:for-each select="//item">  
> <tr><!--Display item record here--></tr>
> <xsl:param name="ItemCount" select="$ItemCount+1"/>
> <xsl:if test="$ItemCount=$maxItemsPage">
> 	<!-- end this table and page -->
> 	</tbody>
> 	</table>
> 	<!-- add page break at end of page -->
> 	<div style='page-break-before: always'> </div>
> 	<!-- start the next page with new table -->
> 	<table width="100%" border="1" cellspacing="0">
> 	<xsl:apply-templates select="tableheader"/>
> 	<tbody>
> </xsl:if>
> </xsl:for-each>

See the FAQ in the 'Tables' section. #3.

Note that //item will be inefficient; you might do better to select

I also assume you really wanted to do a call-template for a named template
named 'tableheader'... unless you have 'tableheader' elements in your XML?

<xsl:variable name="maxItemsPage" select="50"/>
<xsl:variable name="items" select="//item"/>
<!-- start a new table for item 1, 51, 101, 151, etc. -->
<xsl:for-each select="$items[(position()+1) mod $maxItemsPage + 1 = 1]"
  <table width="100%" border="1" cellspacing="0">
    <xsl:call-template name="tableheader"/>
      <!-- start a new row for current item and the next 49 -->
      <xsl:variable name="currentPos" select="position()"/>
      <xsl:for-each select="$items[position() &gt;= $currentPos and position() &lt; $currentPos + $maxItemsPage -1]">
            <xsl:value-of select="."/> <!-- or whatever -->
  <!-- output separator if we're not on the last item in the set -->
  <xsl:if test="$currentPos + $maxItemsPage &gt; count($items)">
    <div style='page-break-before: always'/>

   - Mike
Mike J. Brown, software engineer at         My XML/XSL resources: in Denver, Colorado, USA 

 XSL-List info and archive:

Current Thread