2009-09-11 75 views
4

给定一个XSL '如果' 语句:XSL - 是否评估条件表达式“快捷方式”?

<xsl:if test="a = 'some value' and b = 'another value'"> 

如果a不等于'some value',是b值仍然检查? (就好像第一个测试是falseand的唯一结果是false。)这就是C#这样的语言 - 我想知道XSL中是否也有这种情况。它依赖于引擎/解析器吗?

回答

4

是的,它被称为lazy-evaluation或short-circuiting,并且xsl支持它。参见:http://www.w3.org/TR/xpath#booleans

An和表达通过评估 评估每个操作数和 其值变换为布尔仿佛通过调用 到布尔函数。结果是 如果两个值均为true,则为true,否则为false 。 如果左操作数 的计算结果为false,则右操作数不是 。

0

是的,这取决于实施。但是由于XSLT是无副作用的(与C#和其他语言相反,在表达式中可以包含一些调用某种状态甚至赋值的函数调用),这并不重要。

+0

是的,但使用短路可以节省一点时间,不是吗? – 2009-09-11 10:05:55

+0

当然,但是由于执行顺序并不重要,所以可以进行更多的优化(例如首先执行估计为“更便宜”的查询等) – Lucero 2009-09-11 15:37:43