2011-03-02 34 views
3

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

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

也许它是正确的? – Petras 2011-03-02 08:08:41

+1

我无法测试它,但我会说在你的评论中的方法是正确的,而你的文章中的方法不是。您不能在'select'中选择两个XPath表达式,而您可以在XPath表达式中使用'and'运算符。 – MarcoS 2011-03-02 08:45:35

+0

第二个是正确的。感谢您的回答,我牢记在心。 – Petras 2011-03-02 09:13:02

回答

7

如果问题是更新“是有可能在for-each“a”的select属性中检查2个条件nswer是:。 由于

的表达式必须计算的节点集。 (从ZVON

因此,选择的数据类型必须是节点集不是一个布尔值。

但是,如果你要选择内的两个节点集的xsl:for-eachxsl:template(后者是更好)等,你可以使用联合运营(|):

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

@Petras我还为您的需求添加了一个可能的解决方案 – bluish 2011-03-02 09:20:24

+2

您写道:_“是否可以检查2个条件[答]是:**否** ._这是错误的。表达式必须计算为一个节点集“_。是的,同样请注意你的**节点设置了union **与OP意图无关,从评论中获得 – 2011-03-02 16:24:15

+1

@Ajjandro mhm,可以......我提到问题中的前2个代码片段,如果需要,请编辑我的回复。谢谢! – bluish 2011-03-02 17:13:11