为什么命名空间限定的节点没有XPath语法?

Jos*_*Fox 15 xml xpath namespaces xml-namespaces

XML文档中的某些节点具有名称空间,使用已定义的前缀指定.

可以在XPath 1.0中指定local-name(),因此忽略名称空间.

但是,我想让XPath的编写者使用其完整的名称空间限定名称作为标识符来查找节点.

建议的方法是在调用代码中添加名称空间声明(在我的例子中是Java).但这意味着编写Xpath的人无法使用命名空间!

我们如何使用纯XPath通过其完全限定名称查找节点?

Lar*_*rsH 14

不确定你的"作为标识符"是什么意思.

我们如何使用纯XPath通过其完全限定名称查找节点?

在XPath 1.0中,通过使用local-name()和namespace-uri(),例如

"*[local-name() = 'foo' and namespace-uri() = 'http://my.org/ns/2.0']"
Run Code Online (Sandbox Code Playgroud)

在XPath 2.0中,有一组与命名空间相关的更丰富的函数,例如namespace-uri-from-QName().但我不确定他们是否会根据你的需要改进上述内容.


Jör*_*ann 5

XPath 3.0,当前处于工作草案状态,将包含URI限定QNames的文字表达式,允许直接指定名称空间uri.

以下是EQNames的一些示例:

  • pi是没有名称空间前缀的词法QName.
  • math:pi是带有名称空间前缀的词法QName.
  • "http://www.w3.org/2005/xpath-functions/math":pi使用URILiteral指定名称空间URI; 它不是词汇QName.

我认为Saxon 9.3包含了xpath 3.0的预览实现,它可以通过java api使用.

  • 虽然正确,但3.0功能目前只能在产品的商业版本中启用.诸如"为什么这个功能不在早期版本中"这样的问题总是难以回答 - 要么没有人提出要么他们没有足够努力,或者他们不得不与竞争对手的提案竞争以解决同样的问题. (3认同)