XSLT 1.0:有没有办法根据xslt中的另一个参数获取参数的值?

时间:2011-08-11 19:18:36

标签: xslt xslt-1.0

我在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”而不是“英文标题”(这就是我想要的)。

我正在尝试找到一个干净的解决方案,用于根据语言参数显示相应的文本,而不必为每个文本位使用“选择”块。

有什么想法吗?

2 个答案:

答案 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" />

实际上,与创建数十个不需要的变量相比,选择块干净的解决方案。