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

Confusion about xsl:param and key()

Subject: Confusion about xsl:param and key()
From: "Tom Rippetoe" <tomrippetoe@xxxxxxx>
Date: Mon, 27 Mar 2006 15:24:16 -0800
tom rippetoe
Hello.
 
I am trying to create a stylesheet that will process my data (see below for
sample) to produce an SVG bar chart of mean values of some attribute. The
data ends up being grouped to generate the classes of the bar chart. For
example, I may want to group based on <spcd>, and plot the mean tree <ht>
for each <spcd>.  I have created a stylesheet that can do this, but its a
static stylesheet - I have hardcoded in <spcd> and <ht>. I was hoping to
make the stylesheet more dynamic by adding stylesheet parameters for the
grouping variable and for the attribute of interest, but so far that has
failed. I have tried to set up a grouping parameter and passing in a value
for that parameter but the graph does not look at all like the hard-coded
version. Instead of producing bars for each <spcd> group, bars are produced
for each <tree> element.
 
Here is a code sample. You can see some of the many places that I have
hardcoded in the value 'spcd'. I want to end my dependence on hard coding in
the values and use parameter values instead. How do I do that? xslt version
is 2.0 and processor is saxon 8.7.
 
Small sample of XML

<row>
  <data>	 
    <tree>
       <vol>66.111838</vol>
       <ht>97</ht>
       <dia>18.80</dia>
       <spgrpcd>10</spgrpcd>
       <spcd>202</spcd>
       <fortypcd>22</fortypcd>
       <owngrpcd>12<owngrpcd>
    </tree>
    <tree>
       <vol>46.201</vol>
       <ht>67</ht>
       <dia>8.67</dia>
       <spgrpcd>20</spgrpcd>
       <spcd>11</spcd>
       <fortypcd>22</fortypcd>
       <owngrpcd>12<owngrpcd>
    </tree>
  </data>
 </row>

<xsl:stylesheet version="2.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:exsl_common="http://exslt.org/common"
 xmlns:exsl_math="http://exslt.org/math"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:saxon="http://saxon.sf.net/"
 extension-element-prefixes="exsl_math exsl_common">
 
 <xsl:output omit-xml-declaration="no" standalone="yes" indent="yes"
method="xml"/>
 
 <xsl:param name="groupBy" select="'spcd'" as="xs:string" />
 
 <!-- kept this 'spcd' hardcoded but want to 'parameterize' it as well -->
 <xsl:key name="speciesCodes" match="//row/data/tree" use="spcd" />
 <xsl:variable name="width" select="1000" />
 <xsl:variable name="height" select="1000" />
 
 <xsl:variable name="pathToTrees" select="//row/data/tree" />
 
 <xsl:template match="/">
  <svg xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:a3="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
   onload="init(evt)"
   viewBox="0 0 {$width} {$height}">
    <g id="container">
     <!-- Draw outline of graph -->
     <rect x="0" y="0" width="{$width}" height="{$height}"
style="stroke:#a0a0a0;fill:white;stroke-			width:0.5"
onclick="addRect(evt)"></rect>

     	<!-- This is here for testing purposes but demonstrates the problem.
If I use the literal 'spcd', 		I get a list of the seven unique
<spcd> in my data. If I use the variable $groupBy, I get
      	a list of all the individual trees -->     
 
    	<!-- This produces a list of seven unique <spcd>'s
	<xsl:for-each select="$pathToTrees[count(. | key('speciesCodes',
spcd)[1]) = 1]">
          <text x="200" y="{11 * position()}"><xsl:value-of select="spcd"
/></text>
     	</xsl:for-each>
    
	<!-- This produces a list of text values 'spcd'; one for each tree -
all 500 of them
	<xsl:for-each select="$pathToTrees[count(. | key('speciesCodes',
$groupBy)[1]) = 1]">
          <text x="200" y="{11 * position()}"><xsl:value-of
select="$groupBy" /></text>
     	</xsl:for-each>
    </g>
  </svg>
 </xsl:template>
</xsl:stylesheet>
 
Thank you for any help.

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.