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

Pet*_*ras 4 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')
                ]">
Run Code Online (Sandbox Code Playgroud)

我们可以写:

<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')
                      ]">
Run Code Online (Sandbox Code Playgroud)

最好的祝福

从评论更新

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

blu*_*ish 10

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

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

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

但是,如果要在a中选择两个节点集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')
                      ]">
Run Code Online (Sandbox Code Playgroud)

  • 您写道:_"是否可以检查2个条件[...]答案是:**NO**._这是错的.您写道:_"表达式必须求值为节点集"_.这是对的还要注意你的**节点设置联盟**与从注释中获取的OP意图无关. (2认同)