与 XPath 一起使用时 AND 运算的行为

问题描述 投票:0回答:2

我对与 XPath 一起使用时 AND 运算的行为有疑问。目前,它在 XPath 中搜索时评估每个条件,即使第一个条件本身失败。这很奇怪。不是吗?

有大量语言在评估逻辑 AND 运算时遵循短路行为。

为什么 Xpath 如此不同?或者是否有任何其他方式或配置来告诉 XPath 像任何其他语言一样运行?

xml xpath logical-operators short-circuiting
2个回答
4
投票

XPath 1.0 和 XPath 2.0 之间存在差异。

XPath 1.0(由 @wero 引用)表示必须按顺序评估条件,并且一旦条件返回 false 就必须停止评估。

XPath 2.0 更加自由,允许以任何顺序或并行评估条件。

为什么 XPath 2.0 不同?因为它遵循声明性数据库查询语言的传统,而不是过程式编程语言的传统。在数据库查询语言中,重新排列布尔表达式以最大限度地利用索引是一项关键的优化策略,它可以在以毫秒为单位运行的查询和以小时为单位运行的查询之间产生差异。由于表达式在声明性语言中不能有副作用,因此强制执行顺序实际上会适得其反。

当您说“它评估每个条件”时,您的代词“it”并不是指 XPath 语言,而是指特定的 XPath 实现。了解 (a) 是哪一个,以及 (b) 您如何观察这种行为并得出这些结论会很有趣。

更新

XPath 3.0 和 3.1 与 2.0 相同。

XPath 4.0 草案采用了不同的方法:它表示优化器可以按照他们喜欢的任何顺序计算表达式,但必须表现得好像他们没有这样做一样。也就是说,如果需要,您可以在第一个条件之前评估第二个条件(或并行评估它们),但如果第一个条件评估为 false,则不允许您仅仅因为第二个条件评估失败而抛出错误。


1
投票

可能是您的 xpath 引擎中的错误。看看XPath推荐

and 表达式通过计算每个操作数和来计算 将其值转换为布尔值,就像调用布尔值一样 功能。如果两个值都为 true 和 false,则结果为 true 否则。如果左操作数不计算右操作数 评估结果为 false。

© www.soinside.com 2019 - 2024. All rights reserved.