RE: [xsl] Question on loops

Subject: RE: [xsl] Question on loops
From: <Jarno.Elovirta@xxxxxxxxx>
Date: Tue, 23 Mar 2004 12:34:06 +0200
Hi,

> <?xml version="1.0" encoding="UTF-8"?>
> <DBInspector ReportName="Query Report" Date="15.01.2004">
> 	<SQLStatement>select * from testdb2.person p, 
> testdb2.adresse a where 
> p.persnr = a.persnr</SQLStatement>
> 	<ColumnNames>
> 		<Column>persnr</Column>
> 		<Column>name</Column>
> 		<Column>vorname</Column>
> 		<Column>nr</Column>
> 		...
> 	</ColumnNames>
> 	<ColumnEntries>
> 		<Row>
> 			<Entrie type="Integer">1</Entrie>
> 			<Entrie type="Variable 
> Character">Wehnert</Entrie>
> 			<Entrie type="Variable 
> Character">Lothar</Entrie>
> 			<Entrie type="Variable Character">Yoyo</Entrie>
> 			<Entrie type="Variable 
> Character">Lothar</Entrie>
> 			...
> 		</Row>
> 		<Row>
> 			<Entrie type="Integer">2</Entrie>
> 			<Entrie type="Variable Character">Egg</Entrie>
> 			<Entrie type="Variable Character">Loth</Entrie>
> 			<Entrie type="Variable Character">Was</Entrie>
> 			<Entrie type="Variable Character">Ertz</Entrie>
> 			...
> 		</Row>
> 		...
> 
> My aim is to create a table after e.g. every second column.
> 
> Something like this:
> 
> persnr   name
> ----------------
> 1        Wehnert
> 2        Egg
> 
> 
> vorname  nr
> ----------------
> Yoyo     Lothar
> Was      Ertz

Do you have an error in your example, because the third Entrie is always ignored and you only have four Columns? Anyhow, the approach still applies. 

  <xsl:template match="ColumnNames">
    <xsl:for-each select="Column[position() mod 2 = 1]">
      <xsl:variable name="position" select="position() * 2 - 1"/>
      <table>
        <thead>
          <tr>
            <th>
              <xsl:value-of select="."/>
            </th>
            <th>
              <xsl:value-of select="following-sibling::Column[1]"/>
            </th>
          </tr>
        </thead>
        <tbody>
          <xsl:value-of select="$position"/>
          <xsl:for-each select="../../ColumnEntries/Row/Entrie[position() = $position]">
            <tr>
              <td>
                <xsl:value-of select="."/>
              </td>
              <td>
                <xsl:value-of select="following-sibling::Entrie[1]"/>
              </td>
            </tr>
          </xsl:for-each>
        </tbody>
      </table>
    </xsl:for-each>
  </xsl:template>

Cheers,

Jarno - neuroticfish: wakemeup! (club-edit)

Current Thread