与 XPath 一起使用时的 AND 运算行为
behavior of AND operation while using with XPath
我对与 XPath 一起使用时的 AND 操作行为有疑问。目前它在 XPath 中搜索时评估每个条件,即使第一个条件本身失败。这很奇怪。不是吗?
有很多语言在评估逻辑与运算时遵循短路行为。
为什么 Xpath 如此不同?或者是否有任何其他方式或配置可以让 XPath 像任何其他语言一样运行?
可能是您的 xpath 引擎中的错误。看看 XPath recommendation:
An and expression is evaluated by evaluating each operand and
converting its value to a boolean as if by a call to the boolean
function. The result is true if both values are true and false
otherwise. The right operand is not evaluated if the left operand
evaluates to false.
此处 XPath 1.0 和 XPath 2.0 之间存在差异。
XPath 1.0(由@wero 引用)表示必须按顺序评估条件,并且一旦条件 returns 为假,评估就必须停止。
XPath 2.0 更加自由,允许以任何顺序或并行评估条件。
为什么 XPath 2.0 不同?因为它遵循声明性数据库查询语言的传统,而不是过程编程语言的传统。在数据库查询语言中,重新安排布尔表达式以最大限度地利用索引是一项关键的优化策略,它可以在 运行 毫秒和数小时的查询之间产生差异。由于表达式在声明性语言中不能产生副作用,强制执行顺序确实适得其反。
当您说 "it evaluates each and every condition" 时,您的代词 "it" 并不是指 XPath 语言,而是指特定的 XPath 实现。很想知道 (a) 是哪一个,以及 (b) 您是如何观察到这种行为并得出这些结论的。
我对与 XPath 一起使用时的 AND 操作行为有疑问。目前它在 XPath 中搜索时评估每个条件,即使第一个条件本身失败。这很奇怪。不是吗?
有很多语言在评估逻辑与运算时遵循短路行为。
为什么 Xpath 如此不同?或者是否有任何其他方式或配置可以让 XPath 像任何其他语言一样运行?
可能是您的 xpath 引擎中的错误。看看 XPath recommendation:
An and expression is evaluated by evaluating each operand and converting its value to a boolean as if by a call to the boolean function. The result is true if both values are true and false otherwise. The right operand is not evaluated if the left operand evaluates to false.
此处 XPath 1.0 和 XPath 2.0 之间存在差异。
XPath 1.0(由@wero 引用)表示必须按顺序评估条件,并且一旦条件 returns 为假,评估就必须停止。
XPath 2.0 更加自由,允许以任何顺序或并行评估条件。
为什么 XPath 2.0 不同?因为它遵循声明性数据库查询语言的传统,而不是过程编程语言的传统。在数据库查询语言中,重新安排布尔表达式以最大限度地利用索引是一项关键的优化策略,它可以在 运行 毫秒和数小时的查询之间产生差异。由于表达式在声明性语言中不能产生副作用,强制执行顺序确实适得其反。
当您说 "it evaluates each and every condition" 时,您的代词 "it" 并不是指 XPath 语言,而是指特定的 XPath 实现。很想知道 (a) 是哪一个,以及 (b) 您是如何观察到这种行为并得出这些结论的。