可以使用XPath(1.0)返回XML文档中的命名空间节点吗?
注意:我不是要求具有给定命名空间的节点,而是要求命名空间节点本身。所以不是:
//node()[namespace-uri()='http://a.b']
答案 0 :(得分:3)
如果实现了命名空间轴(Firefox / Mozilla拒绝这样做),那么//namespace::node()
将为您提供所有命名空间节点。但请注意,XSLT / XPath数据模型中的命名空间节点与XML文档中的命名空间声明属性不同,带有标记
<root xmlns="http://example.com/ns">
<foo>
<bar>baz</bar>
</foo>
</root>
所有三个元素都有两个范围命名空间节点,默认一个在根元素上声明,内置一个用于xml
命名空间。
答案 1 :(得分:1)
XPath 1.0中有一个namespace::
轴,所以你可以。在2.0中,它已被弃用,仅适用于兼容模式。但是,您可以查询范围内的所有命名空间绑定/前缀。
依靠实际的命名空间节点通常不是一个好主意,尽管有时这是不可避免的。请注意,namespace::
轴包含该元素范围内的所有命名空间节点。要查找绑定在该特定元素上的元素,必须将节点列表与父元素的范围中的命名空间进行比较。