[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] Recursion not recursing, or not passing parameter. Multiple search/ replace.
Subject: Re: [xsl] Recursion not recursing, or not passing parameter. Multiple search/ replace. From: "David Carlisle d.p.carlisle@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 17 Dec 2015 12:14:43 -0000 |
On 17 December 2015 at 11:56, Kerry, Richard richard.kerry@xxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> 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> > > That's passed to my replace function, along with the source string that > needs all the replacements done. > > <xsl:variable name="template-text-2" as="xs:string" > select="my:replace-sequence( $template-text, $replace-spec )" /> > > The replace-sequence function is supposed to call (built-in > function) "replace()" using the first element in the spec, then recurse and > call itself with the first result string and the remainder of the spec (if > there is any remainder). As follows. > > > > <xsl:function name="my:replace-sequence"> > <xsl:param name="source-string" as="xs:string" /> > <xsl:param name="replace-spec" /> > > > > <xsl:variable name="replace-1" select="$replace-spec/replace[1]" /> > > <xsl:variable name="source-text" as="xs:string" select=" > $replace-1/@source" /> > <xsl:variable name="replacement-text" as="xs:string" select=" > $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::*" /> > > > On the first call your spec is a single document node with child element children so $replace-spec/replace[1] finds the first replacement. But on later calls you pass $replace-1/following-sibling::*" which is a sequence of replace elements so $replace-spec/replace[1] is empty. Ypu want to write it always to take a sequence and selctt th first as $replace-spec[1] and of course pass a sequence in on the first call David > > > > > [image: Blue line] > > *Richard Kerry* > > BNCS Engineer, SI SOL Telco & Media Vertical Practice > > T: +44 (0)20 3618 2669 > > M: +44 (0)7812 325518 > > 4 Triton Square, Regentbs Place, London NW1 3HG > > richard.kerry@xxxxxxxx > <https://webmail.siemens-it-solutions.com/owa/redir.aspx?C=9fb20d019e3e4cb993 44d708709a3177&URL=mailto%3arichard.kerry%40atos.net> > > > > [image: Atos logo] > > This e-mail and the documents attached are confidential and intended > solely for the addressee; it may also be privileged. If you receive this > e-mail in error, please notify the sender immediately and destroy it. As > its integrity cannot be secured on the Internet, the Atos group liability > cannot be triggered for the message content. Although the sender endeavours > to maintain a computer virus-free network, the sender does not warrant that > this transmission is virus-free and will not be liable for any damages > resulting from any virus transmitted. > Atos, Atos Consulting, Worldline and Canopy The Open Cloud Company are > trading names used by the Atos group. The following trading entities are > registered in England and Wales: Atos IT Services UK Limited (registered > number 01245534), Atos Consulting Limited (registered number 04312380), > Atos Worldline UK Limited (registered number 08514184) and Canopy The Open > Cloud Company Limited (registration number 08011902). The registered office > for each is at 4 Triton Square, Regentbs Place, London, NW1 3HG.The VAT No. > for each is: GB232327983. > > This e-mail and the documents attached are confidential and intended > solely for the addressee, and may contain confidential or privileged > information. If you receive this e-mail in error, you are not authorised to > copy, disclose, use or retain it. Please notify the sender immediately and > delete this email from your systems. As emails may be intercepted, amended > or lost, they are not secure. Atos therefore can accept no liability for > any errors or their content. Although Atos endeavours to maintain a > virus-free network, we do not warrant that this transmission is virus-free > and can accept no liability for any damages resulting from any virus > transmitted. The risks are deemed to be accepted by everyone who > communicates with Atos by email. > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <-list/2739265> (by > email <>) > -- http://dpcarlisle.blogspot.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Recursion not recursing, , Kerry, Richard richa | Thread | [xsl] Odd Result-Document Behavior, Eliot Kimber ekimber |
Re: [xsl] Recursion not recursing, , Martin Honnen martin | Date | Re: [xsl] Recursion not recursing, , Kerry, Richard richa |
Month |
Keywords