Subject: Re: [xsl] Grouping adjacent columns in a table From: Andrew Welch <andrew.j.welch@xxxxxxxxx> Date: Fri, 15 Jan 2010 15:27:19 +0000 |
That's an odd requirement but this should be enough to get you started: <xsl:template match="/"> <xsl:variable name="input" select="."/> <xsl:variable name="cols" as="element()+"> <xsl:for-each select="1 to count(//tr[1]/td)"> <col pos="{.}"><xsl:value-of select="$input//tr/td[current()]"/></col> </xsl:for-each> </xsl:variable> <xsl:for-each-group select="$cols" group-by="."> <th><xsl:value-of select="string-join(current-group()/@pos, ', ')"/></th> </xsl:for-each-group> <xsl:template> It stores the columns values in a variable: <col pos="1">100 400 600 900</col> <col pos="2">100 500 600 900</col> <col pos="3">200 500 700 900</col> <col pos="4">200 500 700 900</col> <col pos="5">300 500 800 900</col> then its easy enough to group them to find columns with all the same values: <th>1</th> <th>2</th> <th>3, 4</th> <th>5</th> Given that, it should be enough to work out how to do the rest, cheers andrew 2010/1/15 Kevin Bird <kevin.bird@xxxxxxxxxxxxxxxxxxxxxxx>: > Hello > > I have an XHTML table which can have an arbitrary number of columns and rows. > > For display purposes, I need to reduce the number of columns by grouping adjacent duplicate columns. > > Therefore. > > <table border="1" rules="all"> > <thead> > <tr> > <th>A</th> > <th>B</th> > <th>C</th> > <th>D</th> > <th>E</th> > </tr> > </thead> > <tbody> > <tr> > <td>100</td> > <td>100</td> > <td>200</td> > <td>200</td> > <td>300</td> > </tr> > <tr> > <td>400</td> > <td>500</td> > <td>500</td> > <td>500</td> > <td>500</td> > </tr> > <tr> > <td>600</td> > <td>600</td> > <td>700</td> > <td>700</td> > <td>800</td> > </tr> > <tr> > <td>900</td> > <td>900</td> > <td>900</td> > <td>900</td> > <td>900</td> > </tr> > </tbody> > </table> > > becomes > > <table border="1" rules="all"> > <thead> > <tr> > <th>A</th> > <th>B</th> > <th>C,D</th> > <th>E</th> > </tr> > </thead> > <tbody> > <tr> > <td>100</td> > <td>100</td> > <td>200</td> > <td>300</td> > </tr> > <tr> > <td>400</td> > <td>500</td> > <td>500</td> > <td>500</td> > </tr> > <tr> > <td>600</td> > <td>600</td> > <td>700</td> > <td>800</td> > </tr> > <tr> > <td>900</td> > <td>900</td> > <td>900</td> > <td>900</td> > </tr> > </tbody> > </table> > > as columns 'C' and 'D' contain duplicate values. The real data could contain up to 50 columns and grouping could span several columns. > > I can utilise a XSLT 2.0 solution. > > Any help you be appreciated. > > -- > Kevin > > -- Andrew Welch http://andrewjwelch.com Kernow: http://kernowforsaxon.sf.net/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Grouping adjacent columns in , Kevin Bird | Thread | RE: [xsl] Grouping adjacent columns, Michael Kay |
[xsl] Grouping adjacent columns in , Kevin Bird | Date | RE: [xsl] Grouping adjacent columns, Michael Kay |
Month |