Subject: Re: [xsl] Recursion not recursing, or not passing parameter. Multiple search/ replace. From: "Kerry, Richard richard.kerry@xxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 17 Dec 2015 12:31:11 -0000 |
-----Original Message----- From: Martin Honnen martin.honnen@xxxxxx [mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx] Sent: Thursday, December 17, 2015 12:15 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Recursion not recursing, or not passing parameter. Multiple search/ replace. Kerry, Richard richard.kerry@xxxxxxxx wrote: > I am trying to write an XSLT stylesheet that does a multiple search > and replace. In order to make it work with multiple search/replace > string pairs I think I need to use recursion, calling the built-in > replace function for each pair. However I don't seem to be getting > the parameter set, or used, properly when I try to do the recursive > call to do the next pair. > > I set up the pairs in a sequence of elements as follows: > > <xsl:variable name="replace-spec" > > <replace source="smith_component" replacement="{$new-name}" /> > > <replace source="$ref-uuid-1" replacement="{$new-uuid-1}" /> > <replace source="$ref-uuid-2" replacement="{$new-uuid-2}" /> > > </xsl:variable> Here your variable is a tree fragment with three `replace` child elements. > <xsl:variable name="replace-1" select="$replace-spec/replace[1]" > /> Here you select the first child element. > <xsl:variable name="source-text" as="xs:string" > select="$replace-1/@source <mailto:$replace-1/@source>" /> > <xsl:variable name="replacement-text" as="xs:string" > select="$replace-1/@replacement <mailto:$replace-1/@replacement>" /> > > <xsl:variable name="template-text-2" as="xs:string" > select="replace( $source-string, $source-text, $replacement-text )" /> > > <xsl:variable name="replace-remainder" > select="$replace-1/following-sibling::*" /> Here you select the two following sibling elements > <xsl:choose> > <xsl:when test="$replace-remainder" > > <xsl:variable name="template-text-3" > as="xs:string" select="my:replace-sequence( $template-text-2, > $replace-remainder )" /> and pass them on, which means in the recursive call you are trying to select the replace[1] child of those siblings, and they don't have children. So you rather want to set up the variable as <xsl:variable name="replace-spec" as="element(replace)*">...</xsl:variable> then in the function select <xsl:variable name="replace-1" select="$replace-spec[1]" /> and further on <xsl:variable name="replace-remainder" select="$replace-spec[position() gt 1]" />
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Recursion not recursing, , Martin Honnen martin | Thread | Re: [xsl] Recursion not recursing, , David Carlisle d.p.c |
Re: [xsl] Recursion not recursing, , David Carlisle d.p.c | Date | [xsl] Odd Result-Document Behavior, Eliot Kimber ekimber |
Month |