我在xslt文件中定义了以下参数:
<xsl:param name="language">E</xsl:param>
<xsl:param name="headerTitle-E">English Title</xsl:param>
<xsl:param name="headerTitle-F">French Title</xsl:param>
如何根据语言参数显示相应的标题?
此不有效:
<xsl:value-of select="concat('headerTitle','-',$language)" />
输出“headerTitle-E”而不是“英文标题”(这就是我想要的)。
我正在尝试找到一个干净的解决方案,用于根据语言参数显示相应的文本,而不必为每个文本位使用“选择”块。
有什么想法吗?
答案 0 :(得分:1)
如果现在您的参数在哪里,则可以使用单个XPath。例如,试试这个:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="language">F</xsl:param>
<xsl:param name="headerTitle-E">English Title</xsl:param>
<xsl:param name="headerTitle-F">French Title</xsl:param>
<xsl:template match="/">
<xsl:value-of select="document('')/*/
xsl:param[@name=concat('headerTitle-',$language)]"/>
</xsl:template>
</xsl:stylesheet>
但是我认为使用查询表而不是参数可以更好地完成这类任务。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:empo="lookup"
exclude-result-prefixes="empo"
version="1.0">
<xsl:param name="language">F</xsl:param>
<empo:header name="headerTitle-E">English Title</empo:header>
<empo:header name="headerTitle-F">French Title</empo:header>
<xsl:template match="/">
<xsl:value-of select="document('')/*/
empo:header[@name=concat('headerTitle-',$language)]"/>
</xsl:template>
</xsl:stylesheet>
您可能还希望将当前标头用作变量,只需使用:
<xsl:variable name="Header" select="document('')/*/
empo:header[@name=concat('headerTitle-',$language)]"/>
答案 1 :(得分:0)
您可以使用 xsl:param和xsl:variable中的全部XSLT 。所以这样做:
<xsl:variable name="headerTitle">
<xsl:choose>
<xsl:when test="$language = 'fr'">
French
</xsl:when>
<xsl:otherwise>
English
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$headerTitle" />
实际上,与创建数十个不需要的变量相比,选择块是干净的解决方案。