This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Change the value of a parameter in a template
- To: "'xsl-list at mulberrytech dot com'" <xsl-list at mulberrytech dot com>, "'fredric dot larsson at exertus dot se'" <fredric dot larsson at exertus dot se>
- Subject: RE: Change the value of a parameter in a template
- From: Ed Staub <estaub at kana dot com>
- Date: Mon, 13 Nov 2000 16:09:58 -0500
- Reply-To: xsl-list at mulberrytech dot com
You can't change the value of a parameter or variable.
xsl:param is only allowed at top-level or at the beginning of a template;
your usage is illegal.
If you want to get the result back from a template into a variable, emit the
result into the output stream within the template, and then use something
like:
<xsl:variable name="find">
<xsl:call-template name="findRelation">
<xsl:with-param name="article" select="$article"/>
</xsl:call-template>
</xsl:variable>
See Michael Kay's "XSLT" book, around page 545 ("Computational
Stylesheets"); it covers this area very well.
-Ed Staub
-----Original Message-----
From: fredric larsson [mailto:fredric.larsson@exertus.se]
Sent: Monday, November 13, 2000 10:52 AM
To: xsl-list@mulberrytech.com
Cc: mikael granhed
Subject: Change the value of a parameter in a template
Hi.
I have got the same problem as Laurent has in his mail dated 6 Nov 2000
08:46:48 +0000 from e-mail address: "Ext.ZXSPRCR2A015@tls.mms.fr".
Here is my problem:
I want to compare XML-data with a value of a parameter in my XSL-stylesheet.
XML-data looks like this:
<wc:INSTANCE CLASS="Rel">
<Left>id11</Left>
<Right>id12</Right>
<OBID>id1</OBID>
</wc:INSTANCE>
<wc:INSTANCE CLASS="Rel">
<Left>id21</Left>
<Right>id22</Right>
<OBID>id2</OBID>
</wc:INSTANCE>
I've got a template, called "Relation", with two parameters:
<xsl:param name="article" select='OBID'/>
<xsl:param name="find"/>
I call a new template called "findRelation" and apply the parameters:
<xsl:call-template name="findRelation">
<xsl:with-param name="article" select="$article"/>
<xsl:with-param name="find" select="$find"/>
</xsl:call-template>
In the template "findRelation" I compare the parameter "article" with the
XML-data in a loop ("for-each").
When an element, <Left>, is equal to the parameter "article" I store the
<Right> element in the parameter "find ":
<xsl:template name="findRelation">
<xsl:param name="article"/>
<xsl:param name="find"/>
<xsl:for-each select="//wc:INSTANCE">
<xsl:if test="Left=$article">
<xsl:param name="find" select='Right'/>
</xsl:if>
</xsl:for-each>
</xsl:template>
Then I want to access the parameter "find", with its new value, from the
calling template "Relation".
Does anybody know how to do that?
Regards
Fredric
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list