当我评估这个 XPath 表达式时://superhero[n0:name="Superman"]/n1:name在这个 xml 上:
<n0:rootElement xmlns:n0='http://example.com' xmlns:n1='http://example.com'>
<superheroes>
<superhero>
<n0:name>Superman</n0:name>
<n1:name>Clark</n1:name>
</superhero>
<superhero>
<n0:name>Spiderman</n0:name>
<n1:name>Peter</n1:name>
</superhero>
</superheroes>
</n0:rootElement>
使用 XPath 评估器,我得到了预期的结果。
但是当我将它发送到 XQuery 处理器时,我收到一条错误消息,指出
Namespace prefix 'n0' has not been declared. 很奇怪吧?
引起投诉的总是括号中的前缀(它是否称为过滤器,也许?)。
我使用http://www.xpathtester.com来验证 XPath 和 XQuery 解释之间的区别。
它适用于仅限 XPath的https://codebeautify.org/Xpath-Tester 。
如果我用它替换n0:或n1:替换*:它适用于 XQuery 处理器,但不适用于 XPath 测试人员。
这当然是我为澄清我的问题而写的一个玩具示例。在生产中,我称之为外部服务,我相信它是由 Saxon-HE 驱动的。我知道它接受 XQuery,所以我猜它是 XPath 表达式的“XQuery 模式”。
由于我是从另一个来源收到的,因此我对 xml 文件无能为力。我可以使用更好的 XQuery 表达式吗?
这是一个错误,还是设计使然?