This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Using xsl:apply-templates with xsl:with-param
- To: <xsl-list at mulberrytech dot com>
- Subject: Re: Using xsl:apply-templates with xsl:with-param
- From: "Steve Muench" <smuench at us dot oracle dot com>
- Date: Mon, 15 May 2000 13:50:41 -0700
- References: <002d01bfbea9$78a84f70$3358dfcd@quake.forte.com>
- Reply-To: xsl-list at mulberrytech dot com
| How is xsl:with-param supposed to work from within an xsl:apply-templates
| element? The recommendation doesn't seem to actually spell it out, other
| that saying it is allowed. Consider the following:
I think what's happening here is that your:
<xsl:template match="/">
<root>
<xsl:apply-templates>
<xsl:with-param name="param">List</xsl:with-param>
</xsl:apply-templates>
</root>
</xsl:template>
tells the XSLT processor to "apply templates" to all children
of the current node (in this case, the root "/"), passing
a parameter.
In your source document, the first child of the root
is the <doc> document element, which you don't have
a specific template to handle. So, this is getting
processed by the built-in template that matches child
elements. It's *this* template that gets the parameter
passed to it, but does nothing with it.
As an education example, try adding the template:
<xsl:template match="doc">
<xsl:param name="param">Unset</xsl:param>
<doc param="{$param}">
<xsl:apply-templates/>
</doc>
</xsl:template>
To you stylesheet, and you'll see that the resulting document
comes out as:
<root>
<doc param="List">
<chap title="The beginning" cat="Unset"/>
</doc>
</root>
showing that the parameter *does* get successfully passed to
the "doc" template, but not recursively on down to the "chapter"
template. You could do one of two things, either change
your initial:
<xsl:apply-templates>
<xsl:with-param name="param">List</xsl:with-param>
</xsl:apply-templates>
To specifically select chapters...
<xsl:apply-templates select="doc/chapter">
<xsl:with-param name="param">List</xsl:with-param>
</xsl:apply-templates>
or, add the "doc" template above that passes the parameter "on down"
the line to the chapter template like this:
<xsl:template match="doc">
<xsl:param name="param">Unset</xsl:param>
<xsl:apply-templates>
<xsl:with-param name="param" select="$param"/>
</xsl:apply-templates>
</xsl:template>
______________________________________________________________
Steve Muench, Lead XML Evangelist & Consulting Product Manager
Business Components for Java & XSQL Servlet Development Teams
Oracle Rep to the W3C XSL Working Group
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list