如何比较xsl中的两个变量?

时间:2016-04-02 07:17:02

标签: xml xslt string-comparison teamsite

我正在比较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 个答案:

答案 0 :(得分: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> 

答案 1 :(得分:0)

无论你做什么都是正确的,但事情并不是试图直接比较值而是尝试将它们存储在2个不同的变量中并比较变量。 您可以将xsl变量用作:

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

尝试为2个值分配2个不同的变量: $ CONTEXT_LANGUAGE $ LANGUAGE_EN 。 现在,尝试打印两个变量并在HTML页面上交叉验证它们,如果您获得了已分配的值,那么您就在正确的轨道上,现在尝试循环&lt;&#39; xsl:choose&#39;&gt; 。如果不尝试创建if循环,则应该可以正常工作,并再次检查是否&lt;&#39; xsl:if&#39;&gt;工作良好。据我所知,两人都应该工作。

如果解决方案有用,请投票。

<强>谢谢!