|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Tranforming a table with colspan and rowspan attribute
Hi,
Can anybody help me out with the following?
xml:
<fvtable>
<fvtr>
<fvtd>1</fvtd>
<fvtd>2</fvtd>
<fvtd>3</fvtd>
<fvtd>4</fvtd>
</fvtr>
<fvtr>
<fvtd>5</fvtd>
<fvtd>6</fvtd>
<fvtd>7</fvtd>
<fvtd>8</fvtd>
</fvtr>
</fvtable>
xslt:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="fvtable">
<table width="100%" border="0" cellpadding="0" cellspacing="1">
<xsl:variable name="maxcells">
<xsl:for-each select="fvtr"><xsl:sort select="count(fvtd)"
order="descending"/>
<xsl:if test="position()=1"><xsl:value-of
select="count(fvtd)"/></xsl:if>
</xsl:for-each>
</xsl:variable>
<tr>
<td colspan="{$maxcells*2+1}" bgcolor="#D9DCEF" height="2"></td>
</tr>
<xsl:for-each select="fvtr">
<tr>
<td bgcolor="#D9DCEF" width="2"></td>
<xsl:for-each select="fvtd">
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">
<xsl:apply-templates />
</font>
</td>
<xsl:if test="position() != last()">
<td bgcolor="#D9DCEF" width="1"></td>
</xsl:if>
</xsl:for-each>
<td bgcolor="#D9DCEF" width="2"></td>
</tr>
<xsl:if test="position() != last()">
<tr>
<td colspan="{$maxcells*2+1}" bgcolor="#D9DCEF" height="1"></td>
</tr>
</xsl:if>
</xsl:for-each>
<tr>
<td colspan="{$maxcells*2+1}" bgcolor="#D9DCEF" height="2"></td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
This works ok.
But now I want to change the input XML to be something like this:
<fvtable>
<fvtr>
<fvtd colspan="2">1</fvtd>
<fvtd>2</fvtd>
<fvtd>3</fvtd>
<fvtd>4</fvtd>
<fvtd>5</fvtd>
</fvtr>
<fvtr>
<fvtd>6</fvtd>
<fvtd>7</fvtd>
<fvtd colspan="2">8</fvtd>
<fvtd rowspan="3">9</fvtd>
<fvtd>10</fvtd>
</fvtr>
<fvtr>
<fvtd>11</fvtd>
<fvtd colspan="2" rowspan="2">12</fvtd>
<fvtd>13</fvtd>
<fvtd>14</fvtd>
</fvtr>
<fvtr>
<fvtd>15</fvtd>
<fvtd>16</fvtd>
<fvtd>17</fvtd>
</fvtr>
</fvtable>
And this HTML as output:
<table width="100%" border="0" cellpadding="0" cellspacing="1">
<tr>
<td colspan="13" bgcolor="#D9DCEF" height="2"></td>
</tr>
<tr>
<td bgcolor="#D9DCEF" width="2"></td>
<td colspan="3" bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">1</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">2</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">3</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">4</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">5</font>
</td>
<td bgcolor="#D9DCEF" width="2"></td>
</tr>
<tr>
<td colspan="13" bgcolor="#D9DCEF" height="1"></td>
</tr>
<tr>
<td bgcolor="#D9DCEF" width="2"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">6</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">7</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td colspan="3" bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">8</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td rowspan="5" bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">9</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">10</font>
</td>
<td bgcolor="#D9DCEF" width="2"></td>
</tr>
<tr>
<td colspan="9" bgcolor="#D9DCEF" height="1"></td>
<td colspan="3" bgcolor="#D9DCEF" height="1"></td>
</tr>
<tr>
<td bgcolor="#D9DCEF" width="2"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">11</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td colspan="3" rowspan="3" bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">12</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">13</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">14</font>
</td>
<td bgcolor="#D9DCEF" width="2"></td>
</tr>
<tr>
<td colspan="3" bgcolor="#D9DCEF" height="1"></td>
<td colspan="3" bgcolor="#D9DCEF" height="1"></td>
<td colspan="3" bgcolor="#D9DCEF" height="1"></td>
</tr>
<tr>
<td bgcolor="#D9DCEF" width="2"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">15</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">16</font>
</td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#D9DCEF" width="1"></td>
<td bgcolor="#FFFFDD" valign="top">
<font face="arial" size="2">17</font>
</td>
<td bgcolor="#D9DCEF" width="2"></td>
</tr>
<tr>
<td colspan="13" bgcolor="#D9DCEF" height="2"></td>
</tr>
</table>
I tried a lot of things... But I can't find a single
solution that's able to handle all the cases.
(just simple colspans work, but not things like the definition above)
The stylesheet I am looking for should be able to handle
all kinds combinations with colspan an rowspan
it should include a complete table handler.
Is this possible to build with XSLT? Anyone?
Thanks in advance,
Rogier Hofboer
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








