Subject: Re: [xsl] Multiple replace() in XSLT 2 From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 16 May 2019 19:16:47 -0000 |
I have a look up file of find/change pairs that I have to apply to a text node in my XML document. I am using XSLT 2. Here is an example of the lookup file:
<?xml version="1.0" encoding="UTF-8"?> <findchange_lookup> <findchangefind="Eicas"change="EICAS"/> <findchangefind="Ulb"change="ULB"/> </findchange_lookup>
I am reading this in as a global variable, but I am not sure the best approach for doing multiple replacements on the node. I can use recursion like in XSLT 1, but I can't think of how to do this in XSLT 2.
I don't understand why you say you know recursion in XSLT 1 but can't do it in XSLT 2.
There could be any number of <findchange> elements in my lookup file. Any pointers would be appreciated. Thank you very much.
<xsl:variable name="pattern" as="xs:string" select="string-join(doc('lookup.xml')/findchange_lookup/findchange/@find, '|')"/>
<xsl:template match="foo/text()"> <xsl:analyze-string select="." regex="{$pattern}"> <xsl:matching-substring> <xsl:value-of select="upper-case(.)"/> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template>
<xsl:template match="foo/text()"> <xsl:analyze-string select="." regex="{$pattern}"> <xsl:matching-substring> <xsl:value-of select="key('lookup', ., doc('lookup.xml'))/@change"/> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template>
Not sure if that suffices or if you need to replace one term recursively in the replacement of a previous term.
And of course depending on the "find" values, to build the regular expression pattern, you might need to escape metacharacters first, I think functx has a function for that.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Multiple replace() in XSL, Eliot Kimber ekimber | Thread | Re: [xsl] Multiple replace() in XSL, Martin Honnen martin |
Re: [xsl] Multiple replace() in XSL, Eliot Kimber ekimber | Date | Re: [xsl] Multiple replace() in XSL, Martin Honnen martin |
Month |