Я надеюсь, что вы используете только два языка, иначе мой код не будет работать.Я просто запрограммировал это быстро, так что это может быть не самый модный код.Имейте в виду, что записи должны иметь одинаковый порядок.Поэтому, если вы хотите перевести слово на позицию x в перечислении, x должно быть положением слова в другом перечислении.
Переменная словаря:
<xsl:variable name="dict">
<element name="Hindi">
<simpleType>
<restriction base="xsd:string">
<enumeration value="Inp1" />
<enumeration value="Inp2" />
</restriction>
</simpleType>
</element>
<element name="English">
<simpleType>
<restriction base="xsd:string">
<enumeration value="Bread1" />
<enumeration value="Bread2" />
</restriction>
</simpleType>
</element>
</xsl:variable>
Шаблон соответствия:
<!-- This will match on every node with a specified element/@name in the dictionary -->
<xsl:template match="*[name() = $dict/element/@name]">
<xsl:variable name="fromLanguage" select="name()"/>
<xsl:variable name="wordToTranslate" select="."/>
<!-- My translation requires the same order of enumerations in order to do it correctly -->
<!-- I am counting the preceding siblings, so we can take the xth element of the other dictionary -->
<xsl:variable name="precSiblings" select="$dict/element[@name = $fromLanguage]//enumeration[@value = $wordToTranslate][1]/count(preceding-sibling::*)"/>
<!-- Renaming the language node -->
<xsl:element name="{$dict/element[@name != $fromLanguage]/@name}">
<xsl:value-of select="$dict/element[@name != $fromLanguage]//enumeration[$precSiblings + 1]/@value"/>
</xsl:element>
</xsl:template>