[xsl] Error xsl:param may not be used here

Subject: [xsl] Error xsl:param may not be used here
From: "Ryan Beesley" <RBeesley@xxxxxxxxxxxx>
Date: Mon, 14 Oct 2002 03:41:37 -0500
I know that this error has been addressed on this list before, but I don't
think it has been answered in this context.

I have been working on a set of svg graphing (xslt) utilities that I'd like
to make publically available once my senior design project is complete, but
I've run into a slight snag.  I wanted to be able to customize different
parameters in multiple ways.  Below is listed a small segment of my xml and

---- graph.xml ----
<?xml version="1.0" encoding="UTF-8"?>
<graph type="pie">
 <!-- Graph data goes here -->

---- graph.xslt ----
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

 <xsl:template match="graph">
  <xsl:call-template name="drawGraph">
   <!-- Optional parameters to alter graph -->
   <xsl:with-param name="type" select="'bar'"/>

 <xsl:template name="drawGraph">
  <xsl:variable name="graph" select="." />
  <xsl:param name="type">
    <xsl:when test="not(string-length($graph/@type) = 0)">
     <xsl:value-of select="$graph/@type" />
   <xsl:value-of select="$type"/>


---- output.xml ----
<?xml version="1.0" encoding="UTF-8"?>

Although you would probibly never include a parameter in both the calling
template and the xml data, I have included both to demonstrate the use.  The
passed template param should win however.  When evaluating this with XML
Spy, in debug mode, it works exactly as I want it too.  I can change the
value of @type either while calling the template, or directly from the xml
data.  If neither parameter was provided, the template assumes a default.

Xalan and MSXML fail completely.  If I place my params inside the choose,
then they aren't recognized, as should be, but it doesn't seem to like my
nested choose for the param either.  I suspect that this structure is the
source of my error: xsl:param may not be used here.

If anyone has suggestions as to how I can make this work, I'm always eager
to learn.  I believe I could use a variable to make this work, but then I
wouldn't be able to change it from the template, right?

Ryan Beesley
Founder, Atum Innovations

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

Current Thread