XPath中是否有某种split()
函数? 说我有这样的XML:使用XPath分割节点值
<root>
<path>C:\folder\filename</path>
</root>
我想要检索filename
,我该怎么办呢?我知道我可以得到像这样的节点值:
//path/text()
我怎样才能得到文件名? (?我知道有一个concat()
功能,所以也许有一个split()
功能)
XPath中是否有某种split()
函数? 说我有这样的XML:使用XPath分割节点值
<root>
<path>C:\folder\filename</path>
</root>
我想要检索filename
,我该怎么办呢?我知道我可以得到像这样的节点值:
//path/text()
我怎样才能得到文件名? (?我知道有一个concat()
功能,所以也许有一个split()
功能)
如果你有一个XPath的2.0能力API,你可以通过两种方式解决这个问题:
替代技术
尝试使用:
fn:replace(string,pattern,replace)
如
fn:replace(//path/text(),".*/","")
记号化技术
你可以从令牌化得到一些里程:
fn:tokenize(string,pattern)
例如(感谢马丁)
tokenize(/root/path, '\\')[last()]
是的``tokenize(/ root/path,'\\')[last()]`允许但请注意,replace和tokenize都是XPath 2.0,XPath 1.0中不可用,所以您需要像Saxon 9这样的XPath 2.0实现(http://saxon.sourceforge.net/)。 – 2010-11-23 11:37:05
虽然我会用:
tokenize(/*/*, '\\')[last()]
还有许多其他的方式获得所需的字符串:
codepoints-to-string
(reverse
(string-to-codepoints
(substring-before
(codepoints-to-string
(reverse
(string-to-codepoints(/*/*)
)
),
'\'
)
)
)
)
或:
substring(/*/*,
index-of(string-to-codepoints(/*/*),
string-to-codepoints('\')
)
[last()]
+ 1
)
好问题,+1。除了你已经得到了很好的答案之外,请参阅我的答案以获取其他两种可能的解 – 2010-11-23 17:00:02