使用XPath在命名空间中选择元素

时间:2020-03-06 14:31:06  来源:igfitidea点击:

我想在具有给定名称空间(前缀)的文档中选择最顶层的元素。

更具体地说:我拥有以/ html / body(在XHTML名称空间中)或者特定名称空间中的几个元素之一开头的XML文档。我实际上想剥离/ html / body并只返回正文内容或者整个根命名空间元素。

解决方案

我想要的XPath表达式是:

/html:html/html:body/node()|/foo:*

其中" html"前缀映射到XHTML命名空间,而" foo"前缀映射到我的目标命名空间。

在XPath 2.0和XQuery 1.0中,可以使用谓词中的in-scope-prefixes()函数针对名称空间前缀进行测试。
例如

//*[in-scope-prefixes(.)='html']

如果不能使用v2,则可以在XPath 1.0中使用namespace-uri()函数对命名空间本身进行测试。
例如

//*[namespace-uri()='http://www.w3c.org/1999/xhtml']