On Thu, 2024-04-04 at 15:47 +0000, Roger L Costello costello@xxxxxxxxx
wrote:
> David Carlisle devised a brilliant approach:
One way to make this approach easier to maintain is to use a variable,
e.g. in XSLT
<xsl:variable name="normalisations" as="element(change)*">
<change><from>\\.</from><to>.</to></change>
<change><from>\s+</from><to></to>
</xsl:variable>
and write a recursive function or template to do the replacements.
For those without the XPath 2 constraint, in XPath 3 you can do this:
let $replacements := (
[ "a", "b" ],
[ "c", "oy" ],
[ "bb", "b"]
) return fold-left($replacements, "abc", function($so-far, $this) {
replace($so-far, $this(1), $this(2))
})
using an array and fold-left. Sometimes i put the fold-left into a
separate function, replace-all-from-array() or something, and also
support a third item in each array, flags.
liam
--
Liam Quin,B https://www.delightfulcomputing.com/
Available for XML/Document/Information Architecture/XSLT/
XSL/XQuery/Web/Text Processing/A11Y training, work & consulting.
Barefoot Web-slave, antique illustrations: B http://www.fromoldbooks.org
|