Re: [xsl] newbie question...

Subject: Re: [xsl] newbie question...
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Thu, 29 Nov 2001 11:38:29 +0000
Hi Terje,

> I got a simple table where I receive 4 variables from the xsql
> query:PNS (nom. size), POD (dia.(mm)), PWTH (Wall th.(mm)) and PSCH
> (Schedule). The result is presented on a web-page, but because we
> also want to print it out, we are not able to present more than 22
> records in each table. How do I tell the XSL to start printing a new
> table when it has reached 22 records?

You need to group using the position() of the ROW. You want the 1st,
23rd, 45th etc. ROW elements to generate a new table, so apply
templates only to those ROW elements:

  <xsl:apply-templates select="ROW[position() mod 22 = 1]" />

and have a template that matches ROW elements and creates the table
element. For the rows, it needs to look at that ROW element and its
following 22 siblings. I'd store these in a variable since you're
going to use them again and again to create each row. Then create the
cells in each row by iterating over $rows:

<xsl:template match="ROW">
  <table class="no" style="width:170mm;padding:1pt;" cellspacing="0"
    <xsl:variable name="rows"
      select=". | following-sibling::ROW[position() &lt; 22]" />
      <td class="b">Nom. Size(in)</td>
      <xsl:for-each select="$rows">
        <td class="lb"><xsl:value-of select="PNS" /></td>
      <td class="t">dia.(mm)</td>
      <xsl:for-each select="$rows">
        <td class="lt"><xsl:value-of select="POD" /></td>
      <td class="t">Wall th.(mm)</td>
      <xsl:for-each select="$rows">
        <td class="lt"><xsl:value-of select="PWTH" /></td>
      <td class="t">Schedule</td>
      <xsl:for-each select="$rows">
        <td class="lt"><xsl:value-of select="PSCH" />&nbsp;</td>

I hope that helps,


Jeni Tennison

 XSL-List info and archive:

Current Thread