XPath可以用于返回节点上的命名空间吗?

时间:2012-06-25 11:59:01

标签: xml xpath

可以使用XPath(1.0)返回XML文档中的命名空间节点吗?

注意:我不是要求具有给定命名空间的节点,而是要求命名空间节点本身。所以不是:

//node()[namespace-uri()='http://a.b']

2 个答案:

答案 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::轴包含该元素范围内的所有命名空间节点。要查找绑定在该特定元素上的元素,必须将节点列表与父元素的范围中的命名空间进行比较。