Разделить значение узла с помощью XPath
есть ли какой-то split()
функции в XPath?
Скажем, у меня есть этот XML:
<root>
<path>C:folderfilename</path>
</root>
и я хочу получить filename
, как я могу это сделать? Я знаю, что могу получить значение узла следующим образом:
//path/text()
как я могу получить только имя файла? (Я знаю, что есть concat()
функция, так что, возможно, есть
2 ответов
если у вас есть API с поддержкой xpath-2.0, вы можете решить это двумя способами:
заменить технику
попробуйте использовать:
fn:replace(string,pattern,replace)
например
fn:replace(//path/text(),".*/","")
техника разметки
вы можете получить некоторый пробег от tokenize:
fn:tokenize(string,pattern)
например (Спасибо Мартину)
tokenize(/root/path, '\')[last()]
в то время как я бы использовал:
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
)