[xsl] Strange grouping behavior

Subject: [xsl] Strange grouping behavior
From: Adam Van Den Hoven <Adam.Hoven@xxxxxxxxxxxx>
Date: Thu, 3 May 2001 12:18:44 -0700
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


Current Thread