gpt4 book ai didi

java - XPath 歧义

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:48 28 4
gpt4 key购买 nike

我正在使用以下 XPath 片段

ancestor::contribution[1]/preceding-sibling::contribution[@speaker-reference][1]

我的 Java 应用程序(使用 JDOM 进行 XPath 查询)对此的解释与我们的 Oracle 数据库 (11g) 不同。我能够通过使用括号解决问题,如下所示:

 (ancestor::contribution[1]/preceding-sibling::contribution[@speaker-reference])[1]

因此,JDOM 似乎将 xpath 读取为“所有前面的第一个 贡献,具有属性 @speaker-reference”,而 Oracle 认为“前面的 contribution 具有属性 @speaker-reference 和 position()=1”。

其实我本来打算第一个解释。我想知道根据 XPath 规范,这两种解释中哪一种是正确的(找不到合适的地方查看),或者规范是否允许表达式有歧义。

最佳答案

根据XML Path Language Specification ,方括号运算符 [..] 的优先级为 19,而斜杠 / 的优先级为 18。这意味着最后一个方括号 [1]应该应用于斜杠 / 之后的表达式部分,而不是整个表达式。也就是说,Oracle的解释是对的。

Java 的实现* 不符合标准,它在 / 表达式两边没有括号的情况下为您提供正确的结果。考虑提交一个带有简短示例的错误,并解释发生了什么。

* 讽刺的是,这也是 Oracle 的实现。

关于java - XPath 歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31877765/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com