我在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"而不是"English Title"(这是我想要的)。
我试图找到一个干净的解决方案,根据语言参数显示适当的文本,而不必为每一点文本使用"选择"块。
任何想法?
如果您知道参数所在的位置,则可以使用单个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)]"/>
可以在 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" />
实际上,与创建几十个不必要的变量相比,选择块是干净的解决方案。