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().但我不确定他们是否会根据你的需要改进上述内容.
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使用.