- From: Thomas Broyer <t.broyer@gmail.com>
- Date: Tue, 24 Apr 2007 17:19:49 +0200
- To: public-html@w3.org
2007/4/24, Dmitry Turin: > > >> My interest would be in populating the table with a single round trip > > Preston, what defect has the following construction > ("tc" means "table column"): > > <table attribute="special"> > <tr> > <th id=10>ColName1</th> > <th id=20>ColName2</th> > <th id=30>ColName3</th> > </tr> > <tc> > <th id=1>RowName1</th> > <th id=2>RowName2</th> > <th id=3>RowName3</th> > </tc> > <data> > <td row=1 col=10>Data11</td> > <td row=1 col=20>Data12</td> > <td row=1 col=30>Data13</td> > <td row=2 col=10>Data21</td> > <td row=2 col=20>Data22</td> > <td row=2 col=30>Data23</td> > <td row=3 col=10>Data31</td> > <td row=3 col=20>Data32</td> > <td row=3 col=30>Data33</td> > </data> > </table> You can easily transform this into: <table> <thead> <tr> <td></td> <th id="10">ColName1</th> <th id="20">ColName2</th> <th id="30">ColName3</th> </tr> </thead> <tbody> <tr> <th id="1">RowName1</th> <td>Data11</td> <td>Data12</td> <td>Data13</td> </tr> <tr> <th id="2">RowName2</th> <td>Data21</td> <td>Data22</td> <td>Data23</td> </tr> <tr> <th id="3">RowName3</th> <td>Data31</td> <td>Data32</td> <td>Data33</td> </tr> </tbody> </table> (assuming you mistakenly used <tc> instead <tr> and <tr> instead of <tc>) I did so with the following XSLT: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" /> <!-- identity transformation --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="table[@attribute='special']"> <xsl:variable name="table" select="." /> <table> <thead> <tr> <td> <!-- top/left corner --> </td> <xsl:apply-templates select="tc/th" /> </tr> </thead> <tbody> <xsl:for-each select="tr/th"> <tr> <xsl:apply-templates select="."/> <xsl:call-template name="make-row-data-cells"> <xsl:with-param name="table" select="$table" /> <xsl:with-param name="row" select="@id" /> </xsl:call-template> </tr> </xsl:for-each> </tbody> </table> </xsl:template> <xsl:template name="make-row-data-cells"> <xsl:param name="table" /> <xsl:param name="row" /> <xsl:for-each select="$table/tc/th"> <td> <xsl:apply-templates select="$table/data/td[@row=$row and @col=current()/@id]/node()" /> </td> </xsl:for-each> </xsl:template> </xsl:stylesheet> (far from perfect: for example, it doesn't copy <td> attributes; but enough for the demonstration) -- Thomas Broyer
Received on Tuesday, 24 April 2007 19:49:55 UTC