[xsl] Re: Getting the offset of a matching-substring in <xsl:analyze-string>

Subject: [xsl] Re: Getting the offset of a matching-substring in <xsl:analyze-string>
From: Martin Holmes <mholmes@xxxxxxx>
Date: Sat, 17 Mar 2012 17:19:12 -0700
On 12-03-16 02:09 PM, Michael Kay wrote:
The new fn:analyze-string() function in XPath 3.0, designed to deliver
the benefits of xsl:analyze-string to XQuery users, produces as output a
copy of the input string with added markup to identify the matching and
non-matching substrings, and the captured groups. So you can examine
this output to see where the captured groups are in the string; but it's
still a second pass of a kind.


It's pretty much _exactly_ what I want -- in fact, I ended up building a structure that's almost identical to analyze-string-result but with different tag names.

Off to read the rest of the spec...


Michael Kay

On 16/03/2012 20:57, Martin Holmes wrote:
That's what I did in the end. It would be nice not to have to, though.


On 12-03-15 05:49 PM, Imsieke, Gerrit, le-tex wrote:
I think you need a second pass to calculate the offsets.

On 2012-03-16 01:00, Martin Holmes wrote:
Hi there,

I'm doing some automated markup using <xsl:analyze-string>, and as part
of the output I'd like to record the offset and length of each matched
substring. So given input like this in a text node (simplified

This is a test.

and a match like this:

<xsl:analyze-string select="$input" regex="{'[a-zA-Z]+'}">


<w offset="???" length="{string-length(.)}">

<xsl:value-of select="."/>




I'm wondering if there's any way I can calculate the offset value
for "This" would be 1, for "is" would be 6, etc.).

Does anyone know if there's a way to do this?

All help appreciated,

Current Thread