带有命名空间前缀的xml的xpath表达式

时间:2010-10-14 09:31:16

标签: xml xpath namespaces xml-namespaces prefix

当设置xml路径名称空间前缀时,我无法获得以下xpath表达式。

/bk:BookStore/bk:Books/bk:Book[text()='Time Machine']

XML是:

<BookStore xmlns:bk="http://www.bookstore.com/book#">
  <bk:Books>
    <bk:Book id="1">Time Machine></bk:Book>
  </bk:Books>
</bk:BookStore>

2 个答案:

答案 0 :(得分:27)

甚至更好(也更便携),没有不必要的前缀:

/*/*[local-name()='Books'] ... and so on

The function local-name会忽略任何前缀,正如评论者所说,这些前缀可能会有所不同。

答案 1 :(得分:14)

如果没有关于宿主语言的更多信息(您尝试评估XPath表达式),则无法提供有用的推荐

通常,需要使用命名空间管理器“注册”命名空间,这也会将前缀与注册的命名空间相关联。然后,使用此NamespaceManager对象作为XPath-evaluation方法的参数,可以将此方法的参数指定为包含前缀为该特定前缀的名称的XPath表达式。

<强>变通方法

/*/*[name()='bk:Books']/*[name()='bk:Book' and text()='Time Machine']