【发布时间】:2015-08-07 12:31:01
【问题描述】:
我正在使用 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 属性的所有前面contributions 中的第一个”,而Oracle 认为“具有@speaker-reference and position()=1 属性的前面contribution”。
我实际上打算进行第一种解释。我想知道根据 XPath 规范(找不到合适的位置),这两种解释中哪一种是正确的,或者规范是否允许表达式不明确。
【问题讨论】:
-
您不能添加一个简短的 XML 示例并显示您期望选择的内容,以及 JDOM 和 Oracle 实际选择的内容。没有例子就很难理解你的分析。
-
wero 是对的:两种实现可能不同的潜在原因不止一个,例如轴的反向和绑定优先级。如果没有示例 XML(带有几个
<contribution>元素),就很难确定您对 JDOM 和 Oracle DB 如何工作的分析是正确和完整的,或者很难验证哪个实现是错误的。我很确定这不是 XPath 歧义的问题。 -
另请参阅我关于反向轴如何影响位置谓词含义的问题/答案:stackoverflow.com/a/18524097/423105