for-each的谓词评估是否等于选择的结果

时间:2018-04-17 04:16:06

标签: xslt

我想验证一组“或”或“'作为for-each的谓词的语句类似于choose语句。这两种事情都可以按照我的预期发挥作用,或者我只是找不到会导致问题的边缘案例。

在一个选择结构中,我知道它是按顺序进行评估的,当序列找到一个解析为“真实”的测试时。处理器退出了选择。

<xsl:choose>
   <xsl:when test="number($A) and $A=1">
       <!—do a thing -->
   </xsl:when>
   <xsl:when test="number($A) and $A=2">
       <!—do a thing -->
   </xsl:when>
   <xsl:when test="number($A) and $A &lt; 3">
        <!—do a thing -->
   </xsl:when>
</xsl:choose>

因此,如果第一个和第三个时间为真(极有可能),处理器在第一个解析为真时退出选择。这是伟大的和期望的。然而,当这个选择需要被压缩成一个for-each时,这似乎是一个简单的任务,但在我脑海中的一个唠叨的想法是我很幸运。

<xsl:for-each select="bunch of paths[(number($A) and $A=1) or (number($A) and $A=2) or (number($A) and $A &lt; 3)]

在这个例子中,第一次或第三次(或两次)通过是否可能无关紧要,但我的大部分工作都是在财务日期进行的,所以在这方面我要确保如果第一次和第三次都通过谓词将与choose语句进行相同的评估。

所以,我只是想确保我的假设基于对for-each中的谓词评估的观察与选择相同。

1 个答案:

答案 0 :(得分:3)

两种情况之间的显着差异在于,xsl:for-each示例的评估上下文(在for-each指令的谓词和主体中)都发生了变化,而{{1}情况,整个上下文都是一样的。

另一个区别是xsl:choose始终采用测试表达式的有效布尔值(因此数字1表示为真),而如果值为数字,则谓词具有不同的语义。