Re: [xsl] case conversion with replace() (i.e., with a regular expression)

Subject: Re: [xsl] case conversion with replace() (i.e., with a regular expression)
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 27 Jul 2020 10:13:13 -0000
Saxon has introduced the extension function replace-with() which allows

replace-with($in, '^.', function($x){upper-case($x)})

Michael Kay
Saxonica

> On 26 Jul 2020, at 22:34, Wolfhart Totschnig wolfhart.totschnig@xxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Dear list,
>
> I need to convert the first character of a string from lower-case to
upper-case. I know that I can do so with the following code:
>
> concat(upper-case(substring(.,1,1)),substring(.,2))
>
> I was wondering whether it can also be done with the replace() function,
i.e., with a regular expression. I found out that some regular expression
versions have the command \u for that. So I tried the following:
>
> replace(.,'^(.)','\u$1')
>
> But this produces an error with Saxon ("FORX0004: Invalid replacement string
in replace(): \ character must be followed by \ or $"). Does this mean that
case conversion is not available in the regular expression version implemented
in XSLT? Or did I get the code wrong?
>
> Thanks in advance for your help!
> Wolfhart

Current Thread