|
Subject: Re: [xsl] Help calling templates with parameters From: "Anton Triest" <anton@xxxxxxxx> Date: Wed, 22 Sep 2004 09:08:54 +0200 |
Charlie Consumer wrote:
>
> I'm trying to refactor my XSL so that I can make a
> call to a template from several locations in my XSL.
> However, I need to parameterize this template with a
> node set of where the data should come from. I have
> two documents that I'm merging together to result in
> one document. I'm assigning parameter to a XPath to
> the node set which is correct before I call the
> template. But, when I use it inside the template I
> get "Cannot use result tree fragment. Error in XPath
> expression, Cannot use result tree fragment." Here is
> an example of what I'm doing:
>
> <xsl:for-each select="document($ruleFile)/rulelist/rule[@A='blah']">
> <xsl:call-template name="insertRule">
> <xsl:with-param name="currentRule">
> <xsl:value-of select="current()"/>
> </xsl:with-param>
> </xsl:call-template>
> </xsl:for-each>
Hi Charlie,
<xsl:value-of select="current()"/> returns the text contents of
the current element, not the element itself. You can rewrite
the xsl:with-param like this:
<xsl:with-param name="currentRule" select="current()"/>
which has a totally different result, because here, you pass a
pointer to the 'real' current element. Your next template
should work, then.
But altogether, you can do it easily without any params (and much shorter),
by using apply-templates and match:
<xsl:variable name="rules" select="document($ruleFile)/rulelist/rule"/>
<xsl:template match="/">
<xsl:apply-templates select="$rules[@A='blah']"/>
</xsl:template>
<xsl:template match="rule">
<rule id="{blah/@id}"/>
</xsl:template>
Cheers,
Anton
> <xsl:template name="insertRule">
> <xsl:param name="currentRule"
> <xsl:element name="rule">
> <xsl:attribute name="id">
> <xsl:value-of select="$currentRule/blah/@id"/>
> </xsl:attribute>
> </xsl:element>
> </xsl:template>
>
> I'm using XMLSpy's debugger to step through the XSL,
> and once I enter the template the parameter isn't a
> node set like it was before I called the template, but
> a node fragment. I don't know what a node fragment
> is. Can anyone explain this? And, what am I doing
> wrong here? Sorry I'm new to XSL. I tried reading
> the faq and archive, but I couldn't find anything
> about this in either location.
>
> Charlie
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Help calling templates with p, Charlie Consumer | Thread | Re: [xsl] Help calling templates wi, cking |
| RE: [xsl] Access Root Node from nam, Arun Sinha | Date | Re: [xsl] Help calling templates wi, cking |
| Month |