用于检查前缀绑定到的命名空间的 XPath

XPath to check the namespace a prefix is bound to

假设我有以下 XML 文件:

<a xmlns:foo="http://foo"></a>   

我需要检查前缀 foo 是否绑定到 http://foo。其中 not bound 可以指示所述前缀根本不存在或绑定到某个其他命名空间 URI。 我已经有一个库,该库采用存在于该 XPath 的 Document object and an XPath expression and returns a (possibly empty) List of Nodes。

那么什么表达式会检查绑定到命名空间 http://foo 的最顶层元素(文档元素)中是否存在前缀 foo 并且会产生一个节点对于上述 XML 和以下 XML 的零节点:

<a xmlns:fooX="http://foo"></a>

< xmlns:foo="http://fooX"></a>

作为第一步,我尝试使用以下方法获取该属性的值:

/*[@*[local-name()='foo']]

...但前缀绑定属性的处理方式似乎与 "normal" 属性不同。

如果你想用 XPath 来做,那么你必须使用名称空间轴:/*[namespace::foo[. = 'http://foo']]。 DOM 级别 3 可能提供不同的方式将名称空间声明视为属性和解析前缀,请参阅 http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI