XSLT 1.0: есть ли способ получить значение параметра на основе другого параметра в xslt? - PullRequest
1 голос
/ 11 августа 2011

В моем файле 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" (что я и хочу).

Я пытаюсь найти чистое решение для отображения соответствующего текста на основе параметра языка без необходимости использовать блок «выбор» для каждого бита текста.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Если вы сейчас где ваши параметры, вы можете использовать один 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)]"/>
0 голосов
/ 11 августа 2011

Вы можете использовать полную ширину XSLT внутри xsl: param и xsl: variable.Сделайте это так:

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

На самом деле, блок выбора является чистым решением по сравнению с созданием десятков ненужных переменных.

...