XSLT 1.0:是否有一种方法可以根据XSLT中的另一个参数获得参数的值?



我在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" />

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

相关内容

  • 没有找到相关文章

最新更新