xsl:for-each select =:两个条件

时间:2011-03-02 08:04:05

标签: xslt

在xsl中我们可以在循环中为每个“写入”两个条件。例如,而不是

<xsl:when test="/document/line[
                   (substring(field[@id='0'], 1,3)='MAR')
                ] and 
                /document/line[
                   contains(substring(field[@id='0'],123,4),'0010')
                ]">

我们可以写出来:

<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR')
                      ] and 
                      /document/line[
                         contains(substring(field[@id='0'],123,4),'0010')
                      ]">

祝你好运

从评论中更新

<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR') 
                         and contains(substring(field[@id='0'],123,4),'0010')
                      ]">

1 个答案:

答案 0 :(得分:8)

如果问题是“是否可以检查for-each的select属性中的2个条件”,答案是: NO 。 因为

  

表达式必须求值为节点集。   (来自ZVON

因此,select的数据类型必须是节点集而不是布尔值。

但是,如果要在xsl:for-eachxsl:template(后者更好)等内选择两个节点集,则可以使用 union运算符( |):

<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR')
                      ] | 
                      /document/line[
                         contains(substring(field[@id='0'],123,4),'0010')
                      ]">