This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: Change the value of a parameter in a template


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]