[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] rephrased: passing parameters to generic templates
Subject: Re: [xsl] rephrased: passing parameters to generic templates From: "andrew welch" <andrew.j.welch@xxxxxxxxx> Date: Wed, 12 Apr 2006 09:25:14 +0100 |
On 4/12/06, Robert Frank <robert.frank@xxxxxxxxx> wrote: > Hi, > > I noticed I didn't phrase my problem carefully enough (and the example > wasn't correct either - thank's David) - probably too late at night: > > I want to convert only certain (html) nodes using a generic template, > but have to pass a parameter to these templates. As the nodes may be > nested within othernodes, I am using the generic copy 'function' > > <xsl:template match="@*|node()|text()" priority="-1"> > <xsl:param name="path" select="'zz'"/> > <xsl:copy> > <xsl:apply-templates select="@*|node()|text()"> > <xsl:with-param name="path" select="$path"/> > </xsl:apply-templates> > </xsl:copy> > </xsl:template> > > The more specific template is: > > <xsl:template match="/content"> > <test> > <xsl:apply-templates select="para"> > <xsl:with_param name="path" select="docBase"/> > </xsl:apply-templates> > </test> > </xsl:template> > > and the element I want to change: > > <xsl:template match="a/@href"> > <xsl:param name="path" select="'xx'"/> > <xsl:attribute name="href"><xsl:value-of select="$path"/> > <xsl:value-of select="."/></xsl:attribute> > </xsl:template> > > A sample xml file could be: > <content> > <para> > <docBase>full_path_to_some_directory</docBase> > This is a test <b>text</b> which should be copied 1:1. > <a href=3D"local_ref">A reference</a> > <center><a href=3D"local_ref">A nested reference</a></center> > </para> > <para> > <docBase>next_full_path_to_some_directory</docBase> > This is a test <b>text</b> which should be copied 1:1. > <a href=3D"local_ref">A reference</a> > <center><a href=3D"local_ref">A nested reference</a></center> > </para> > </content> > > I want to use the <docBase> in every <para> to modify the href > of each anhor element. > How can I propagate the parameter's value in the more specific > template into the generic template? The only parameter that is > propagated is the one in the generic template, so all references have > a value of zz... No need for parameters here, just select the paras <docBase> when you match the <a>, eg: <xsl:template match="a"> <a href="{ancestor::para/docBase}">..... Be aware that using the ancestor axis is probably the slowest solution, so if that's an issue there are faster ways to do this...
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] rephrased: passing parameters, Robert Frank | Thread | Re: [xsl] rephrased: passing parame, Florent Georges |
RE: [xsl] Is Saxon the *only* XSLT , Michael Kay | Date | RE: [xsl] xupdate and xslt, Michael Kay |
Month |
Keywords