|
Subject: RE: [xsl] Obtaining sums From: "Passin, Tom" <tpassin@xxxxxxxxxxxx> Date: Mon, 16 Aug 2004 15:28:08 -0400 |
> 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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Obtaining sums, michael . s . eberha | Thread | [xsl] How to import multiple styles, Zhen Jiang |
| Re: [xsl] Retrieving the date of pr, Daniel Bibbens | Date | Re: [xsl] Grouping and counting val, Wendell Piez |
| Month |