xml
  • xslt
  • string-comparison
  • teamsite
  • 2016-04-02 32 views 2 likes 
    2

    我比較xsl中的兩個變量。當我做如何比較xsl中的兩個變量?

    <p>Language:<xsl:value-of select="$LANGUAGE_EN"/>=<xsl:value-of select="$CONTEXT_LANGUAGE"/></p> 
    

    它輸出en=en

    但是,當我比較使用:

    <xsl:choose> 
        <xsl:when test='string($CONTEXT_LANGUAGE) = string($LANGUAGE_EN)'> 
         <p>English Language</p> 
        </xsl:when> 
        <xsl:otherwise> 
         <p>French Language</p> 
        </xsl:otherwise>     
    </xsl:choose> 
    

    它總是返回French Language,但它應該返回English Language

    有人可以幫助我在這一點上,我失去了我的這一整天嗎?

    +2

    你的測試表達式應該已經工作。發佈最小XML和XSLT示例以重現問題 – har07

    +0

    如果您發佈了XML示例,那麼診斷問題會更容易。這個問題可能是你在XML輸出中看不到的額外空白。 –

    +0

    我已經定義像這樣的變量:的 FR Emran

    回答

    1

    您的值可能包含您未看到的前導空格和/或結尾空格;特別是在瀏覽器中查看呈現的HTML時。在你的第一個例子,之前和值後追加一個字符:

    <p>Language:*<xsl:value-of select="$LANGUAGE_EN"/>*=*<xsl:value-of select="$CONTEXT_LANGUAGE"/>*</p> 
    

    你也可以測試string-length()

    如果差開頭或結尾的空格,您可以使用normalize-space()功能擺脫他們的時候比較值:

    <xsl:choose> 
        <xsl:when test='normalize-space($CONTEXT_LANGUAGE) = normalize-space($LANGUAGE_EN)'> 
         <p>English Language</p> 
        </xsl:when> 
        <xsl:otherwise> 
         <p>French Language</p> 
        </xsl:otherwise>     
    </xsl:choose> 
    
    +0

    語言:* en * = * en * – Emran

    +0

    我試過上面沒有做任何事情 – Emran

    +0

    在**和**之前**和**之後打印**。看起來在註釋中的第一個'en'之前有一個空格...另外,什麼是'string-length()'值? –

    0

    無論你正在做的是正確的,但事情是不要試圖對值進行比較,而不是直接嘗試將它們存儲在2個不同的變量和比較變量。 您可以使用XSL變量爲:

    <xsl:variable 
    name="name" 
    select="expression"> 
    </xsl:variable> 
    

    嘗試分配爲2個值2個不同的變量:$ CONTEXT_LANGUAGE$ LANGUAGE_EN。 現在,嘗試打印這兩個變量並在HTML頁面上進行交叉驗證,如果您正在獲取您分配的值,那麼您處於正確的軌道上,現在嘗試循環<'xsl:choose'>。這應該工作得很好,如果不嘗試創建一個if循環並再次檢查<'xsl:if'>是否正常工作。對我而言,兩者都應該工作。

    如果解決方案有用,請投票。

    謝謝!

    相關問題