Re:  [xsl] Need an XPath expression which returns all xs:pattern elements containing a regex that permits an unbounded number of characters

Subject: Re:  [xsl] Need an XPath expression which returns all xs:pattern elements containing a regex that permits an unbounded number of characters
From: "Liam R. E. Quin liam@xxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 4 Apr 2024 23:54:12 -0000
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

Current Thread