17

当设置了 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>
4

2 回答 2

37

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

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

该函数local-name忽略任何前缀,正如评论者正确指出的那样,前缀可能会有所不同。

于 2011-11-18T11:14:12.243 回答
18

如果没有关于宿主语言的更多信息(您尝试在其中评估 XPath 表达式),就不可能提供有用的建议

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

解决方法

/*/*[name()='bk:Books']/*[name()='bk:Book' and text()='Time Machine']
于 2010-10-14T18:01:20.627 回答