This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Strange grouping behavior
- To: "XSL Mailing List (E-mail)" <xsl-list at lists dot mulberrytech dot com>
- Subject: [xsl] Strange grouping behavior
- From: Adam Van Den Hoven <Adam dot Hoven at bluezone dot net>
- Date: Thu, 3 May 2001 12:18:44 -0700
- Reply-To: xsl-list at lists dot mulberrytech dot com
I have the following XML:
<report>
<header>
<title>Test Header1</title>
<creationdate>20010405</creationdate>
<parameter name="Start Date">20001201</parameter>
<parameter name="End Date">20001201</parameter>
<parameter name="Property">val1</parameter>
<parameter name="Property">val2</parameter>
<parameter name="Property">val3</parameter>
<parameter name="Property">val4</parameter>
<parameter name="Property">val5</parameter>
<parameter name="Platform">Web1</parameter>
<parameter name="Platform">Web2</parameter>
<parameter name="Platform">Web3</parameter>
<parameter name="Platform">Web4</parameter>
<parameter name="Platform">Web5</parameter>
<parameter name="Platform">Web6</parameter>
</header>
</report>
To which I am applying the following template:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Windows-1252" indent="yes"/>
<xsl:key name="ReportParam" match="parameter[@name]" use="@name" />
<xsl:template match="/">
<html><body>
<xsl:apply-templates select="/report/header" />
</body></html>
</xsl:template>
<xsl:template match="header">
<table>
<xsl:apply-templates
select="parameter[generate-id(.)=generate-id(key('ReportParam', @name))]" />
</table>
</xsl:template>
<xsl:template match="parameter">
<tr class="reportparameter">
<xsl:if test="not(preceding-sibling::parameter[@name =
current()/@name])">
<td>
<xsl:attribute name="rowspan">
<xsl:value-of select="count(key('ReportParam', @name))" />
</xsl:attribute>
<xsl:value-of select="@name" />
</td>
</xsl:if>
<td><xsl:value-of select="normalize-space(.)" /></td>
<td><xsl:value-of select="count(following-sibling::parameter[@name
= current()/@name])" /></td>
</tr>
<xsl:apply-templates select="following-sibling::parameter[@name =
current()/@name]" />
</xsl:template>
</xsl:stylesheet>
Produces the following output (I'm running from cooktop but using the MSXML
parser setting):
<html>
<body>
<table>
<tr class="reportparameter"><td rowspan="1">Start
Date</td><td>20001201</td><td>0</td></tr>
<tr class="reportparameter"><td rowspan="1">End
Date</td><td>20001201</td><td>0</td></tr>
<tr class="reportparameter"><td
rowspan="5">Property</td><td>val1</td><td>4</td></tr>
<tr class="reportparameter"><td>val2</td><td>3</td></tr>
<tr class="reportparameter"><td>val3</td><td>2</td></tr>
<tr class="reportparameter"><td>val4</td><td>1</td></tr>
<tr class="reportparameter"><td>val5</td><td>0</td></tr>
<tr class="reportparameter"><td>val5</td><td>0</td></tr>
<tr class="reportparameter"><td>val4</td><td>1</td></tr>
<tr class="reportparameter"><td>val5</td><td>0</td></tr>
<tr class="reportparameter"><td>val5</td><td>0</td></tr>
<tr class="reportparameter"><td>val3</td><td>2</td></tr>
<tr class="reportparameter"><td>val4</td><td>1</td></tr>
<tr class="reportparameter"><td>val5</td><td>0</td></tr>
<tr class="reportparameter"><td>val5</td><td>0</td></tr>
<tr class="reportparameter"><td>val4</td><td>1</td></tr>
<tr class="reportparameter"><td>val5</td><td>0</td></tr>
<tr class="reportparameter"><td>val5</td><td>0</td></tr>
<tr class="reportparameter"><td
rowspan="6">Platform</td><td>Web1</td><td>5</td></tr>
<tr class="reportparameter"><td>Web2</td><td>4</td></tr>
<tr class="reportparameter"><td>Web3</td><td>3</td></tr>
<tr class="reportparameter"><td>Web4</td><td>2</td></tr>
<tr class="reportparameter"><td>Web5</td><td>1</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web5</td><td>1</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web4</td><td>2</td></tr>
<tr class="reportparameter"><td>Web5</td><td>1</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web5</td><td>1</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web3</td><td>3</td></tr>
<tr class="reportparameter"><td>Web4</td><td>2</td></tr>
<tr class="reportparameter"><td>Web5</td><td>1</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web5</td><td>1</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web4</td><td>2</td></tr>
<tr class="reportparameter"><td>Web5</td><td>1</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web5</td><td>1</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
<tr class="reportparameter"><td>Web6</td><td>0</td></tr>
</table>
</body></html>
Ok, I reformatted the output but that is not the problem.
The problem is that if I have more than 2 items in a group, I get this
behaviour. Any ideas?
> Adam van den Hoven
> Internet Application Developer
> Blue Zone
> tel. 604.685.4310 ext 260
> fax. 604.685.4391
> Blue Zone makes you interactive.(tm) http://www.bluezone.net/
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list