使用XPath拆分节点值

Ris*_*nst 10 xml xpath-2.0

split()XPath中有某种功能吗?说我有这个XML:

<root>
   <path>C:\folder\filename</path>
</root>
Run Code Online (Sandbox Code Playgroud)

我想要检索filename,我该怎么做?我知道我可以得到这样的节点值:

//path/text()
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得文件名?(我知道有一个concat()功能,所以也许有一个split()功能?)

Ale*_*own 8

如果您有支持xpath-2.0的API,则可以通过两种方式解决此问题:

替换技术

尝试使用:

fn:replace(string,pattern,replace)
Run Code Online (Sandbox Code Playgroud)

例如

fn:replace(//path/text(),".*/","")
Run Code Online (Sandbox Code Playgroud)

标记化技术

您可以从tokenize获得一些里程:

fn:tokenize(string,pattern)
Run Code Online (Sandbox Code Playgroud)

例如(感谢Martin)

tokenize(/root/path, '\\')[last()]
Run Code Online (Sandbox Code Playgroud)

http://www.w3schools.com/Xpath/xpath_functions.asp#string

  • 是的,`tokenize(/ root/path,'\\')[last()]`允许这样做,但请注意,replace和tokenize都是XPath 2.0,在XPath 1.0中不可用,所以你需要像Saxon 9这样的XPath 2.0实现( http://saxon.sourceforge.net/). (3认同)