|
Subject: RE: [xsl] XML grouping/sorting question - displaying a matrix From: <Jarno.Elovirta@xxxxxxxxx> Date: Tue, 30 Mar 2004 10:26:56 +0300 |
Hi,
> Finally, I would ultimately like to sort the columns in the
> above matrix by
> element count so that the elements which appear most are in the first
> columns, though I haven't found a way to do this:
>
> ID X C B Y
> 0001 * *
> 0002 * *
> 0003 * *
> 0004 * *
<xsl:key name="test-by-name" match="test" use="name"/>
<xsl:template match="records">
<html>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<xsl:for-each select="record/test[count(. | key('test-by-name', name)[1]) = 1]">
<xsl:sort select="count(key('test-by-name', name))" data-type="number" order="descending"/>
<th>
<xsl:value-of select="name" />
</th>
</xsl:for-each>
</tr>
</thead>
<tbody>
<xsl:for-each select="record/test">
<xsl:variable name="current" select="name"/>
<tr>
<th>
<xsl:value-of select="@id"/>
</th>
<xsl:for-each select="../../record/test[count(. | key('test-by-name', name)[1]) = 1]">
<xsl:sort select="count(key('test-by-name', name))" data-type="number" order="descending"/>
<td>
<xsl:if test="name = $current">*</xsl:if>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</tbody>
</table>
</body>
</html>
</xsl:template>
or, if can use ext:node-set
<xsl:template match="records" xmlns:exsl="http://exslt.org/common">
<html>
<body>
<table>
<xsl:variable name="columns-rtf">
<xsl:for-each select="record/test[count(. | key('test-by-name', name)[1]) = 1]">
<xsl:sort select="count(key('test-by-name', name))" data-type="number" order="descending"/>
<xsl:copy-of select="name" />
</xsl:for-each>
</xsl:variable>
<xsl:variable name="columns" select="exsl:node-set($columns-rtf)/name"/>
<thead>
<tr>
<th>ID</th>
<xsl:for-each select="$columns">
<th>
<xsl:value-of select="." />
</th>
</xsl:for-each>
</tr>
</thead>
<tbody>
<xsl:for-each select="record/test">
<xsl:variable name="current" select="name"/>
<tr>
<th>
<xsl:value-of select="@id"/>
</th>
<xsl:for-each select="$columns">
<td>
<xsl:if test=". = $current">*</xsl:if>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</tbody>
</table>
</body>
</html>
</xsl:template>
or you could create a space separated list of column names and go through that with a recursive template.
Cheers,
Jarno
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] XML grouping/sorting question, Kevin Daniels | Thread | Re: [xsl] XML grouping/sorting ques, Kevin Daniels |
| [xsl] how to <xsl:apply-templates /, Terence Kearns | Date | AW: [xsl] how to <xsl:apply-templat, christof.hoeke |
| Month |