2011-08-11 4 views
1

я следующий PARAMS определен в моем файле 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" в отличие от "английского названия" (который является то, что я хочу).

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

Любые идеи?

ответ

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)]"/> 
+0

Что вы пробовали? Пожалуйста, предоставьте отзыв. –

+0

Извините за задержку. Я не смог реализовать ваше решение, потому что наша внутренняя структура предотвращает вызовы документа ('') по соображениям безопасности. Решением, которое я реализовал, является вызов функции на стороне сервера из файла xsl, который извлекает текст на основе пары значений ключа (в файле language.xml). Затем функция возвращает правильный текст на основе строки запроса «Язык». – http203

0

Вы можете использовать полный broadth в XSLT внутри XSL: параметров и XSL: переменная. Так что это так:

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

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

+0

Да, я это понимаю. Но есть много * текста для перевода, поэтому я бы предпочел не иметь больших блоков кода для каждой метки. Есть ли способ вызвать шаблон для установки текста переменной? Я также открыт для других предложений. – http203

+0

@ beth26, проверьте мой ответ –

+0

Ну, вы можете использовать пользовательские именованные шаблоны для каждого, а затем ' '. Кроме того, да, вы могли бы использовать ответ empo. – Boldewyn

Смежные вопросы