The string-range( ) Function

The string-range() function is unusual. Rather than operating on a location set—including various tags, comments, processing instructions, and so forth—it operates on the text of a document after all markup has been stripped from it. Tags are more or less ignored.

The string-range( ) function takes as arguments an XPath expression identifying locations and a substring to try to match against the XPath string value of each of those locations. It returns one range for each non-overlapping match, exactly covering the matched string. Matches are case sensitive. For example, this XPointer produces ranges for all occurrences of the word “Wizard” in title elements in the document:

xpointer(string-range(//title, "Wizard"))

If there are multiple matches, then multiple ranges are returned. For example, this XPointer returns two ranges when applied to Example 11-1, one covering the W in “Wonderful” and one covering the W in “Wizard”:

xpointer(string-range(//title, "W"))

You can also specify an offset and a length to the function so that strings start a certain number of characters from the beginning of the match and continue for a specified number of characters. The point before the first character in the string to search is 1. For example, this XPointer selects the first four characters after the word “Wizard” in title elements:

xpointer(string-range(//title, "Wizard", 7, 4))

Nonpositive indices work backward in the document before the beginning of the match. For ...

Get XML in a Nutshell, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.