如何在XPath中按属性名称空间查找元素

我尝试使用XPath查找给定名称空间中具有元素的所有元素

例如,在下面的文档中,我想找到foo:bardoodah元素:

<?xml version=“1.0”encoding=“UTF-8”?>
<根xmlns:foo=”http://foo.example.com“>
<foo:bar qux=“value”>内容&lt/foo:bar>
<widget>内容&lt/widget>
<doodah foo:qux=“value”>内容&lt/杜达>
&lt/根>

我知道我可以使用以下XPath表达式从给定命名空间加载所有属性:

“/@*[名称空间-uri()=”http://foo.example.com']"

然而:

  • 这并没有给我元素,只是属性
  • 如果元素包含来自该名称空间的多个属性,则此选择器将针对每个属性而不是每个元素返回结果

是否有可能得到我想要的,或者我必须收集属性并计算它们对应的唯一元素集

使用:

/*[namespace-uri()='yourNamespaceURI-here'
或
@*[namespace-uri()='yourNamespaceURI-here']
]

谓词的两个条件使用XPath运算符进行or运算

因此,XPath表达式选择以下任一元素:

  • 属于指定的命名空间
  • 具有属于指定命名空间的属性

发表评论