我想验证一组“或”或“'作为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 < 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 < 3)]
在这个例子中,第一次或第三次(或两次)通过是否可能无关紧要,但我的大部分工作都是在财务日期进行的,所以在这方面我要确保如果第一次和第三次都通过谓词将与choose语句进行相同的评估。
所以,我只是想确保我的假设基于对for-each中的谓词评估的观察与选择相同。
答案 0 :(得分:3)
两种情况之间的显着差异在于,xsl:for-each
示例的评估上下文(在for-each
指令的谓词和主体中)都发生了变化,而{{1}情况,整个上下文都是一样的。
另一个区别是xsl:choose
始终采用测试表达式的有效布尔值(因此数字1表示为真),而如果值为数字,则谓词具有不同的语义。