XSLT Использование и хранение словарей во внешних XML.

 

Часто бывает полезно хранить набор значений для перевода в отдельном словаре и при необходимости подставлять то или иное значение по параметру. В xslt это реализовано средствами функции document и елемента xsl:key

Пример:

Шаблон translate лучше всего хранить в отдельном файле
<xsl:key name="dict" match="entry" use="@name"/>

<xsl:template name="translate">
<xsl:param name="dict"/>
<xsl:param name="keyval"/>
<xsl:for-each select="document($dict)">
<xsl:apply-templates select="key(\'dict\',$keyval)"/>
</xsl:for-each>
</xsl:template>

Словарик будет выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<dict_title>
<entry name="ru">Russian Federation</entry>
<entry name="us">United States of America</entry>
</dict_title>

Вызов будет выглядеть так:
<xsl:call-template name="translate">
<xsl:with-param name="dict">dictionaryname.xml</xsl:with-param>
<xsl:with-param name="keyval">keyname</xsl:with-param>
</xsl:call-template>