Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 与XPath一起使用时的和操作的行为_Xml_Xpath_Logical Operators_Short Circuiting - Fatal编程技术网

Xml 与XPath一起使用时的和操作的行为

Xml 与XPath一起使用时的和操作的行为,xml,xpath,logical-operators,short-circuiting,Xml,Xpath,Logical Operators,Short Circuiting,我对与XPath一起使用时的行为和操作有疑问。目前,它在XPath中搜索时计算每个条件,即使第一个条件本身失败。这很奇怪。不是吗 在评估逻辑AND操作时,有大量语言遵循短路行为 为什么Xpath如此不同?或者是否有任何其他方式或配置来告诉XPath与其他语言一样工作?可能是XPath引擎中的一个错误。请看一下: and表达式通过计算每个操作数和 通过调用布尔值将其值转换为布尔值 功能。如果两个值都为true和false,则结果为true 否则。右操作数未计算,如果左操作数 计算结果为false

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

在评估逻辑AND操作时,有大量语言遵循短路行为


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

可能是XPath引擎中的一个错误。请看一下:

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


这里XPath 1.0和XPath 2.0之间存在差异

XPath 1.0(被@wero引用)说,必须按顺序计算条件,并且一旦条件返回false,计算就必须停止

XPath2.0更加自由,允许以任意顺序或并行方式计算条件

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


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

迈克尔说得很好,XPath 2.0更喜欢优化而不是求值顺序。是否有任何方法或配置可以让XPath按照顺序求值,并在任何条件返回false时立即停止?在XPath 2.0中,要强制执行此操作,必须编写
if(A)then B else false()
。(即使如此,规范保证对B的求值如果失败不会导致错误,实际上也不能保证B不会被求值,因此如果A和B是对具有副作用的外部函数的调用,您仍然得不到绝对保证。)