2012-02-01 27 views
5
<xsl:variable name="a">20</xsl:variable> 
    <xsl:variable name="b">10</xsl:variable> 

     <xsl:if test="($a) > ($b)"> 
     ------ 
    </xsl:if> 

我得到錯誤的如果condion ..如何檢查哪個變量在xsl中更大?

+0

看起來好像沒什麼問題。 libxslt和Transformiix都不顯示錯誤。 – Saxoier 2012-02-01 15:03:36

+0

有用@user_nums – 2012-02-01 15:59:12

回答

5

嘗試以下方法:

<xsl:if test="$a &gt; $b"> 

嘗試使用字符實體>(& GT)和<(&≤)運營商表達式,否則一些解析器認爲您提前關閉標籤或打開另一個標籤。

+0

你不必轉義'>'。絕對有可能使用'$ a> $ b'。 – Saxoier 2012-02-01 15:07:45

+0

你說得對,我在很久以前使用過的XSLT解析器讓我逃避它們以避免解析器錯誤。剛剛檢查過,你的代碼工作正常。我每天都會學到新東西,謝謝! – 2012-02-01 15:13:08

5

您發佈的示例應該有效。然而,你不應該在你的情況下這兩個變量都是字符串類型,如果長度不同,可能會給出令人驚訝的結果。比較運算符在不同數據類型上的行爲在xpath spec on booleans中指定。

爲了避免這種情況,你可以使用select屬性聲明變量或手動將它們轉換成number的比較:

<xsl:variable name="a" select="20"/> 
<xsl:variable name="b" select="10"/> 
... 
<xsl:if test="number($a) > number($b)"> 
</xsl:if> 
+1

「當要比較的對象都不是節點集並且運算符爲<=, <, > =或>時,則通過將兩個對象轉換爲數字並根據IEEE 754比較數字來比較對象。」 - 沒有未定義的行爲。 – Saxoier 2012-02-01 16:05:39

+0

@Saxoier:你說得對,你引用前的段落只適用於運算符'='和'!='。 – 2012-02-01 17:02:13