【发布时间】:2011-10-26 18:26:54
【问题描述】:
XML 文档中的某些节点具有名称空间,并使用定义的前缀指定。
可以在 XPath 1.0 中指定 local-name() 从而忽略命名空间。
但是,我想让 XPath 的编写者能够使用它们的完整命名空间限定名称作为标识符来查找节点。
推荐的方法是在调用代码(在我的例子中是 Java)中添加命名空间声明。但这意味着编写 Xpath 的人没有使用命名空间的能力!
我们如何使用纯 XPath 通过它们的完全限定名称来查找节点?
【问题讨论】:
-
如果我正确理解了这个问题,您是在问为什么需要使用像
addNamespace("abc","http://example.com")这样的指令来声明命名空间,然后允许执行像/abc:node这样的 Xpath 查询,而不是不知何故直接在查询中使用http://example.com。我是否正确解释了这个问题? -
@Jong Bor 是的,就是这样。在 XPath 中以某种方式声明 abc=example.com 之后,直接在 XPath 查询中使用前缀 abc 会很好。我知道 XPath 表达式很短,通常不会在其中插入定义,但从技术上来说,没有什么可以阻止在 XPath 中实现这一点。
-
BTW 好问题,+1。由于前缀应该只是无关紧要的语法糖,而命名空间 URI 才是重要的,所以您会认为匹配节点名称是命名空间 URI 可能很有用,而不必弄乱前缀——尤其是如果 XPath 本身提供没有办法声明前缀。
标签: xml xpath namespaces xml-namespaces