[xsl] Grouping (yet again)

Subject: [xsl] Grouping (yet again)
From: "Steven Noels" <stevenn@xxxxxxxxxxxxxxxx>
Date: Tue, 19 Feb 2002 16:22:27 +0100
OK, I give up :-(

Having spent most of the day trying to add some structure to a file, I'm lost on Muenchian stuff :-(

partial inputfile

<list>
	<datum day="02" dir="axis" dow="5" group="Downloads" month="11" value="74" week="43" year="2001"/>
	<datum day="02" dir="batik" dow="5" group="Downloads" month="11" value="87" week="43" year="2001"/>
	<datum day="02" dir="cocoon" dow="5" group="Downloads" month="11" value="36" week="43" year="2001"/>
	<datum day="02" dir="cocoon2" dow="5" group="Downloads" month="11" value="39" week="43" year="2001"/>
	<datum day="02" dir="crimson" dow="5" group="Downloads" month="11" value="116" week="43" year="2001"/>
	<datum day="02" dir="fop" dow="5" group="Downloads" month="11" value="241" week="43" year="2001"/>
	<datum day="02" dir="soap" dow="5" group="Downloads" month="11" value="296" week="43" year="2001"/>
	<datum day="02" dir="xalan-c" dow="5" group="Downloads" month="11" value="25" week="43" year="2001"/>
	<datum day="02" dir="xalan-j" dow="5" group="Downloads" month="11" value="245" week="43" year="2001"/>
	<datum day="02" dir="xang" dow="5" group="Downloads" month="11" value="7" week="43" year="2001"/>
	<datum day="02" dir="xerces-c" dow="5" group="Downloads" month="11" value="368" week="43" year="2001"/>
	<datum day="02" dir="xerces-j" dow="5" group="Downloads" month="11" value="1125" week="43" year="2001"/>
	<datum day="02" dir="xerces-p" dow="5" group="Downloads" month="11" value="56" week="43" year="2001"/>
	<datum day="03" dir="axis" dow="6" group="Downloads" month="11" value="16" week="43" year="2001"/>
	<datum day="03" dir="batik" dow="6" group="Downloads" month="11" value="4" week="43" year="2001"/>
	<datum day="03" dir="cocoon" dow="6" group="Downloads" month="11" value="3" week="43" year="2001"/>
	<datum day="03" dir="cocoon2" dow="6" group="Downloads" month="11" value="7" week="43" year="2001"/>
	<datum day="03" dir="crimson" dow="6" group="Downloads" month="11" value="29" week="43" year="2001"/>
	<datum day="03" dir="fop" dow="6" group="Downloads" month="11" value="72" week="43" year="2001"/>
	<datum day="03" dir="soap" dow="6" group="Downloads" month="11" value="115" week="43" year="2001"/>
	<datum day="03" dir="xalan-c" dow="6" group="Downloads" month="11" value="3" week="43" year="2001"/>
	<datum day="03" dir="xalan-j" dow="6" group="Downloads" month="11" value="38" week="43" year="2001"/>
	<datum day="03" dir="xerces-c" dow="6" group="Downloads" month="11" value="81" week="43" year="2001"/>
	<datum day="03" dir="xerces-j" dow="6" group="Downloads" month="11" value="350" week="43" year="2001"/>
	<datum day="03" dir="xerces-p" dow="6" group="Downloads" month="11" value="8" week="43" year="2001"/>

	[...]

	
</list>

desired outputformat

<foo>
	<data group="Downloads">
		<datum week="200143" total="(sum of value atts for this week)">
			<datum dir="projectname" value="downloads"/>
			<datum dir="" value=""/>
			<datum dir="" value=""/>
			... (repeated for each dir)
		</datum>
		... (repeated for each week)
	</data>
	... (repeated for each group)
</foo>

my stylesheet so far

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

	<xsl:key name="datum-group" match="datum" use="@group"/>
	<xsl:key name="datum-groupyearweek" match="datum" use="concat(@group,'-',@year,'-',@week)"/>
	<xsl:key name="datum-groupyearweekdir" match="datum" use="concat(@group,'-',@year,'-',@week,'-',@dir)"/>

	<xsl:template match="list">
		<graph>
			<xsl:for-each select="datum[generate-id() = generate-id(key('datum-group', @group)[1])]">
				<data group="{@group}">
					<xsl:for-each select="key('datum-group', @group)
								[generate-id() =
								 generate-id(key('datum-groupyearweek', concat(@group,'-',@year,'-',@week))[1]
								 )]">
						<datum week="{concat(@year,@week)}">
							<xsl:for-each select="key('datum-groupyearweek', concat(@group,'-',@year,'-',@week))
								[generate-id() =
								 generate-id(key('datum-groupyearweekdir', concat(@group,'-',@year,'-',@week,'-',@dir))[1]
								 )]">
								 <datum dir="{@dir}" value="{@value}"/>
							</xsl:for-each>
						</datum>
					</xsl:for-each>
				</data>
			</xsl:for-each>
		</graph>
	</xsl:template>
</xsl:stylesheet>

and output so far

<?xml version="1.0" encoding="UTF-8"?>
<graph>
	<data group="Downloads">
		<datum week="200143">
			<datum value="74" dir="axis"/>
			<datum value="87" dir="batik"/>
			<datum value="36" dir="cocoon"/>
			<datum value="39" dir="cocoon2"/>
			<datum value="116" dir="crimson"/>
			<datum value="241" dir="fop"/>
			<datum value="296" dir="soap"/>
			<datum value="25" dir="xalan-c"/>
			<datum value="245" dir="xalan-j"/>
			<datum value="7" dir="xang"/>
			<datum value="368" dir="xerces-c"/>
			<datum value="1125" dir="xerces-j"/>
			<datum value="56" dir="xerces-p"/>
		</datum>
		<datum week="200144">
			<datum value="25" dir="axis"/>
			<datum value="22" dir="batik"/>
			<datum value="2" dir="cocoon"/>
			<datum value="13" dir="cocoon2"/>
			<datum value="39" dir="crimson"/>
			<datum value="74" dir="fop"/>
			<datum value="149" dir="soap"/>
			<datum value="5" dir="xalan-c"/>
			<datum value="46" dir="xalan-j"/>
			<datum value="4" dir="xang"/>
			<datum value="96" dir="xerces-c"/>
			<datum value="481" dir="xerces-j"/>
			<datum value="10" dir="xerces-p"/>
		</datum>
...

all-in-all, it looks pretty well, but something is wrong with the grouping...: the numbers are completely incorrect :-(

Is there any glaring error somewhere in my stylesheet?

Thanks for any help,

</Steven>

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread