Split node value with XPath

Rise_against picture Rise_against · Nov 23, 2010 · Viewed 14.5k times · Source

Is there some kind of split() function in XPath? Say I have this XML:

<root>
   <path>C:\folder\filename</path>
</root>

And I want to retrieve filename, how can I do this? I know I can get the node value like this:

//path/text()

How can I get only the filename? (I know there is a concat() function, so maybe there is a split() function?)

Answer

Alex Brown picture Alex Brown · Nov 23, 2010

If you have an xpath-2.0 capable API, you can solve this in two ways:

replace technique

Try using:

fn:replace(string,pattern,replace)

e.g.

fn:replace(//path/text(),".*/","")

tokenize technique

You may get some mileage from tokenize:

fn:tokenize(string,pattern)

e.g. (thanks to Martin)

tokenize(/root/path, '\\')[last()]

w3schools xml processing "xsl functions" documentation