【发布时间】:2010-10-06 11:39:03
【问题描述】:
我正在尝试使用 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']"
但是:
- 这并没有给我元素,只是属性。
- 如果元素包含来自该命名空间的多个属性,此选择器将返回每个属性而不是每个元素的结果
是否有可能得到我想要的,还是我必须收集属性并计算它们对应的唯一元素集?
【问题讨论】:
-
您是否忘记为 doodah 添加命名空间?因为我看不到如何通过命名空间来选择它。
-
如果说明不清楚,我在原始示例中使用了错误的命名空间。我的错。
-
感谢这篇文章,它真的很有帮助。总结一下: - 从给定的命名空间获取具有属性的元素:
//*[@*[namespace-uri()='http://foo.example.com']]- 从给定的命名空间获取属性://@*[namespace-uri()='http://foo.example.com']
标签: xml xpath namespaces