Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt xsl:for each select=:两个条件_Xslt - Fatal编程技术网

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

Xslt xsl:for each select=:两个条件,xslt,Xslt,在xsl中,我们可以在“for each”循环中编写两个条件。例如,而不是 <xsl:when test="/document/line[ (substring(field[@id='0'], 1,3)='MAR') ] and /document/line[ contains(substring(field[@id='0'],123,4),'001

在xsl中,我们可以在“for each”循环中编写两个条件。例如,而不是

<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')
                      ]">

如果问题是“是否可以检查a的select属性中的两个条件”,则答案是:。 因为

表达式的计算结果必须为节点集。 (来自)

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

但是,如果要在
xsl:for each
xsl:template
(后者更好)等中选择两个节点集,可以使用联合运算符(|):



也许它是正确的?我无法测试它,但我想说你评论中的方法是正确的,而你帖子中的方法则不是。不能在
select
中选择两个XPath表达式,而可以在XPath表达式中使用
运算符。第二个是正确的。谢谢你的回答,我会记住它。@Petras我还为你的需要添加了一个可能的解决方案你写道:“有可能检查两个条件吗[…]答案是:没有。那是错误的。你写道:“表达式必须计算到一个节点集。””“是的。还要注意,节点集联合和从注释中获取的操作意图无关。@Alejandro mhm,可能是。。我参考了问题中的前两个代码片段。如果需要,请编辑我的回复。谢谢我的解决方案是使用联合运算符(管道)。谢谢你的意见!
<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR')
                      ] | 
                      /document/line[
                         contains(substring(field[@id='0'],123,4),'0010')
                      ]">