RE: [xsl] quick table layout problem

Subject: RE: [xsl] quick table layout problem
From: Jarno.Elovirta@xxxxxxxxx
Date: Mon, 7 Jan 2002 14:46:29 +0200
Hi

> Below is the xml for a table.  Its a huge amount of code for 
> a very small
> amount of data... but thats beside the point (I have no 
> control over the
> input)  What I need is the table to be drawn using the widths 
> specified by
> the colwidth attributes of the colspec.

Use

<xsl:template name="tableHead">
  <xsl:for-each select="//table//thead//entry">
    <col width="{ancestor::colspec[@colname =
current()/@colname][1]/@colwidth}" />
  </xsl:for-each>
  <xsl:for-each select="//table//thead//entry">
    <th>
      <xsl:value-of select="."/>
    </th>
  </xsl:for-each>
</xsl:template>

It should output col elements with the specified width attribute. It's
really un-efficient way of doing it because of all the the //s , so you
should probably rewrite it so that it will only have to go throught the
entry elements once. Also, match pattern such as "//tbody/row[position()
mod 2 = 0]" would probably be better rewritten to something like
"tbody/row[position() mod 2 = 0]" - better yet, 

<xsl:template match="row">
  <tr>
    <xsl:for-each select="entry">
      <td>
        <xsl:if test="position() mod 2 = 0">
          <xsl:attribute name="class">table_row_color</xsl:attribute>
        </xsl:if>
        <xsl:value-of select="."/>
      </td>
    </xsl:for-each>
  </tr>
</xsl:template>

Hope this helps,

Santtu

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread