This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Maximum number of cells
- To: xsl-list at lists dot mulberrytech dot com
- Subject: RE: [xsl] Maximum number of cells
- From: "Dudley, Mark" <Mark dot Dudley at usa dot xerox dot com>
- Date: Thu, 21 Dec 2000 08:07:56 -0500
- Reply-To: xsl-list at lists dot mulberrytech dot com
Thank you all for your help. This list is an excelleent resource for
developers and its because of people like you!
Mark
-----Original Message-----
From: Steve Muench [mailto:Steve.Muench@oracle.com]
Sent: Wednesday, December 20, 2000 6:03 PM
To: xsl-list@lists.mulberrytech.com
Subject: Re: [xsl] Maximum number of cells
Here's a solution that does what I think you're trying
to achieve (generate an appropriate colspan="xxx" for
rows that have fewer than the max(cells) number of cells)
Given your input:
<table>
<row>
<cell>...</cell>
</row>
<row>
<cell>...</cell>
<cell>...</cell>
<cell>...</cell>
</row>
<row>
<cell>...</cell>
<cell>...</cell>
</row>
</table>
the stylesheet below produces the output:
<html>
<body>
<table>
<tr>
<td colspan="3">...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td colspan="2">...</td>
</tr>
</table>
</body>
</html>
Here's the stylesheet:
<x:stylesheet xmlns:x="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Compute the max(count(cell)) for all <row> elements -->
<x:variable name="maxcells">
<x:for-each select="/table/row">
<x:sort data-type="number" order="descending" select="count(cell)"/>
<x:if test="position()=1"><x:value-of select="count(cell)"/></x:if>
</x:for-each>
</x:variable>
<x:template match="cell">
<td>
<!-- If we're processing the last cell and $maxcells is greater -->
<x:if test="position()=last() and $maxcells > position()">
<x:attribute name="colspan">
<x:value-of select="$maxcells - position() + 1"/>
</x:attribute>
</x:if>
<x:apply-templates/>
</td>
</x:template>
<x:template match="/">
<html><body>
<x:apply-templates/>
</body></html>
</x:template>
<x:template match="table">
<table>
<x:apply-templates select="row"/>
</table>
</x:template>
<x:template match="row">
<tr>
<x:apply-templates select="cell"/>
</tr>
</x:template>
</x:stylesheet>
______________________________________________________________
Steve Muench, Lead XML Evangelist & Consulting Product Manager
BC4J & XSQL Servlet Development Teams, Oracle Rep to XSL WG
Author "Building Oracle XML Applications", O'Reilly
http://www.oreilly.com/catalog/orxmlapp/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list