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 /path/from/root/to/all/item. 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"/> <tbody> <!-- start a new row for current item and the next 49 --> <xsl:variable name="currentPos" select="position()"/> <xsl:for-each select="$items[position() >= $currentPos and position() < $currentPos + $maxItemsPage -1]"> <tr> <td> <xsl:value-of select="."/> <!-- or whatever --> </td> </tr> </xsl:for-each> </tbody> </table> <!-- output separator if we're not on the last item in the set --> <xsl:if test="$currentPos + $maxItemsPage > count($items)"> <div style='page-break-before: always'/> </xsl:if> </xsl:for-each> - Mike ____________________________________________________________________ Mike J. Brown, software engineer at My XML/XSL resources: webb.net in Denver, Colorado, USA http://www.skew.org/xml/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[newbie]use of xsl:if {RE: XSL to h, Xu, Xiaocun | Thread | Re: [newbie]use of xsl:if {RE: XSL , Jeni Tennison |
Re: Can I access elements in the ou, Mike Brown | Date | Inserting into a href tag, Chris Rugowski |
Month |