2012-08-29 34 views
1

我想代表在XSLT以下如果:如果值不爲下列任何XSLT

if (status != Disconnected || status != BadNumber || status != NoCallsAccepted || status != Fax) 

我知道這可以用choose表達來完成,但我不想這麼多的冗長添加到模板...

我已經試過同時使用後續的不同變化AND和OR時,適當的:

<xsl:if test="not(@status = 'BadNumber') AND not(@status = 'Disconnected') AND not(@status = 'NoCallsAccepted') AND not(@status = 'Fax')"> 

但是這會導致語法錯誤。

回答

1

這可以在更緊湊的形式表示爲

<xsl:if test= 
"not(contains('|BadNumber|Disconnected|NoCallsAccepted|Fax|', 
       concat('|', @status,'|') 
       ))"> 

在XPath 2.0 (XSLT 2.0)甚至可以使用更緊湊的表達式:

<xsl:if test="not(@status=('BadNumber','Disconnected','NoCallsAccepted','Fax'))"> 
+0

哇! 'contains'!完善! –

+0

@justnS:不客氣。 –

1

我想出了我的錯誤......大寫和。

<xsl:if test="@status != 'BadNumber' and @status != 'Disconnected' and @status != 'NoCallsAccepted'and @status != 'Fax'"> 
0

如果您使用XSLT 2.0,您可以簡化:

<xsl:if test="not(@status=('BadNumber','Disconnected','NoCallsAccepted','Fax'))">