我正在尝试使用 XPath 查找在给定命名空间中具有某个元素的所有元素。
例如,在下面的文档中我想找到 foo:bar
和 doodah
元素:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:foo="http://foo.example.com">
<foo:bar quux="value">Content</foo:bar>
<widget>Content</widget>
<doodah foo:quux="value">Content</doodah>
</root>
我知道我可以使用以下 XPath 表达式从给定的命名空间加载所有属性:
"//@*[namespace-uri()='http://foo.example.com']"
但是:
- 这没有给我元素,只有属性。
- 如果元素包含来自该命名空间的多个属性,则此选择器将返回每个属性而不是每个元素的结果
是否可以得到我想要的,还是必须收集属性并计算它们对应的唯一元素集?
最佳答案
使用:
//*[namespace-uri()='yourNamespaceURI-here'
or
@*[namespace-uri()='yourNamespaceURI-here']
]
谓词两个条件与 XPath or
运算符进行或运算。
因此,XPath 表达式会选择满足以下任一条件的任何元素:
- 属于指定的命名空间。
- 具有属于指定命名空间的属性。
关于xml - 如何在 XPath 中通过属性命名空间查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529556/