[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Obtaining sums

Subject: RE: Obtaining sums
From: "Passin, Tom" <tpassin@xxxxxxxxxxxx>
Date: Mon, 16 Aug 2004 15:28:08 -0400
unique sums
> From: michael.s.eberhart@xxxxxxxxxxx

> I can't seem to figure out how to get a list of sums for each state.
>

This kind of question used to get asked more often than it does now.
Maybe the FAQs are working!

> The data looks like this:
>
> <LEVEL name="AB">
>       <TYPE name="MK001">
>             <STATE name="MAINE">91</STATE>
>             <STATE name="ALASKA">73</STATE>
>             <STATE name="OHIO">128</STATE>
>       </TYPE>
> ...
> </LEVEL>
>

This is a grouping problem.  With xslt 1.0 you have to use one or
another  trick to group all the entries for a particular state together
so they can be summed.  The most common trick is to use a key and
generate-id to create a list of unique items - state names in this case.
Then you can sum them all.  Rather than critique your code, I'll just
show you how this other way looks -

<xsl:variable name='states' select='/LEVEL/TYPE/STATE'/>
<xsl:key name='states' match='STATE' use='@name'/>

<!-- Here we find the first of all states with the same name -->
<xsl:variable name='unique-states'
	select='/LEVEL/TYPE/STATE[generate-id() =
generate-id(key("states",@name)[1])]'/>

<xsl:template match="/LEVEL">
<results>
	<xsl:for-each select='$unique-states'>
		<xsl:variable name='state-entries'
			select='$states[@name = current()/@name]'/>
		<sum state='{@name}'>
			<xsl:value-of select='sum($state-entries)'/>
		</sum>
	</xsl:for-each>
</results>
</xsl:template>

> The output should appear as:
>
> MAINE ALASKA      OHIO
> 219   158         176


I didn't format it this way but you can modify the templates to get it.
BTW, when you send in a request for help, please try to remove
extraneous things, like all that html code.

Also BTW, you have a probably typo in the key name "LEVLE-KEY" (which I
assume you use somewhere else).

Cheers,

Tom P

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.