2

我在比较两个变量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

有人可以帮我解决这个问题吗,我为此浪费了一整天?

4

2 回答 2

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> 
于 2016-04-02T14:31:29.623 回答
0

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

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

尝试为 2 个值分配 2 个不同的变量:$CONTEXT_LANGUAGE$LANGUAGE_EN。现在,尝试打印这两个变量并在 HTML 页面上对它们进行交叉验证,如果您获得分配的值,那么您就在正确的轨道上,现在尝试您的循环 <'xsl:choose'>。如果不尝试创建 if 循环并再次检查 <'xsl:if'> 是否正常工作,这应该可以正常工作。根据,对我来说两者都应该工作。

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

谢谢!

于 2017-01-06T13:13:43.023 回答