使用XPath拆分节点值

时间:2010-11-23 10:38:20

标签: xml xpath-2.0

XPath中是否存在某种split()函数? 说我有这个XML:

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

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

//path/text()

我怎样才能获得文件名? (我知道有一个concat()函数,所以可能有一个split()函数?)

2 个答案:

答案 0 :(得分:8)

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

替换技术

尝试使用:

fn:replace(string,pattern,replace)

e.g。

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

标记化技术

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

fn:tokenize(string,pattern)

e.g。 (感谢马丁)

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

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

答案 1 :(得分:1)

虽然我会使用

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
           )