This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: quick table layout problem
- From: Jarno dot Elovirta at nokia dot com
- To: xsl-list at lists dot mulberrytech dot com
- Date: Mon, 7 Jan 2002 14:46:29 +0200
- Subject: RE: [xsl] quick table layout problem
- Reply-to: xsl-list at lists dot mulberrytech dot com
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