2011-03-28 33 views
7

對於2個不同的變量,我有AND和OR的級聯。並且我嘗試了以下方法:有條件和或兩個不同的值

<xsl:if test="$countryCode = '104' 
       and 
       (transactionType != 'Allowance' 
       or 
       revenueCenter != '1100')"> 

但這並不奏效。是否有可能做一個條件測試或做我必須把它分裂這樣的:

<xsl:if test="$countryCode='104'> 

,並在第二個元素我做的:

<xsl:if transactionType!='Allowance' or revenueCenter!='1100'> 

我在互聯網上搜索,但沒有找到任何提示。任何人都可以幫助我找到解決方案。 謝謝你,最好的問候, 彼得

+0

什麼是TRANSACTIONTYPE和revenueCenter?可能有一個變量引用的問題(爲什麼不使用$?)第二種方法是錯誤的 – HamoriZ 2011-03-28 12:31:57

+0

它是如何「不工作」?你有沒有得到任何結果;如果是這樣,它們與你期望的有什麼不同? – 2011-03-28 12:40:18

+0

你好佐爾坦,參考是好的。我通過在元素中輸出它們來檢查它們。如果countryCode匹配104且其他條件之一爲真(在相應引用中沒有「允許」和「1100」),則應該創建某個XML元素。我嘗試使用「包含」功能。也許我得到想要的輸出。 – Peter 2011-03-28 12:56:18

回答

10

XPath表達式

$countryCode='104' 
    and 
    (transactionType!='Allowance' or revenueCenter!='1100') 

語法正確

我們不能說任何有關語義的知識,因爲沒有提供XML文檔,也沒有解釋表達式必須選擇什麼。

像往常一樣,有建議不將OSE中!=操作者,除非確實需要 - 時的參數中的一個是其使用的節點集(或序列或節點集XPath 2.0中)是非常遠離大多數人的期望。

而不是!=更好的使用功能not()

$countryCode='104' 
and 
    (not(transactionType='Allowance') or not(revenueCenter='1100')) 

,這可以進一步進行重構,以更短的和等價的:

$countryCode='104' 
and 
    not(transactionType='Allowance' and revenueCenter='1100') 
+0

你好Dimitre,非常感謝你的回答。我不知道運算符「!=」的問題。我一直在使用它,但將來會嘗試使用「not()」。我嘗試了最後一個示例代碼,它的工作原理非常完美 - 謝謝! – Peter 2011-03-28 13:16:55

+0

主要區別在於,如果沒有transactionType,'transactionType!='Allowance''返回false,'not(transactionType ='Allowance')'返回true。今後請提供一些源XML,以便更容易地爲您提供幫助。 – 2011-03-28 13:22:05

+0

@彼得:不客氣。我無法立即回覆,因爲我忙於閱讀@ Michael-Kay在瀏覽器中實現XSLT 2.0的XML布拉格文章 - 很棒的東西! – 2011-03-28 13:47:45