我正在比较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
。
有人可以帮我解决这个问题,我在这一天都失去了一整天吗?
答案 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;工作良好。据我所知,两人都应该工作。
如果解决方案有用,请投票。
<强>谢谢!强>