Это преобразование (44 строки из которых 14 словарь):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my" exclude-result-prefixes="my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kTranslate"
match="w/@r" use="../@e"/>
<my:translations>
<w e="name" r="Название"/>
<w e="model" r="Модель"/>
<w e="year" r="Год"/>
<w e="glass_type" r="Тип"/>
<w e="scancode" r="Сканкод"/>
<w e="eurocode" r="Еврокод"/>
<w e="comment" r="Комментарий"/>
<w e="glass_size" r="Размер"/>
<w e="vendor" r="Производитель"/>
<w e="trademark" r="Торговая марка"/>
<w e="fprice" r="Цена"/>
</my:translations>
<xsl:template match="part">
<table class="part">
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="part/*">
<xsl:variable name="vName" select="name()"/>
<xsl:variable name="vRName">
<xsl:for-each select="document('')">
<xsl:value-of select="key('kTranslate', $vName)"/>
</xsl:for-each>
</xsl:variable>
<tr>
<td><xsl:value-of select="$vRName"/></td>
<td><xsl:value-of select="."/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
при применении к этому документу XML :
<object>
<part>
<name>FooName</name>
<model>FooName</model>
<year>FooName</year>
<glass_type>Fooglass_type</glass_type>
<scancode >Fooscancode</scancode>
<eurocode>Fooeurocode</eurocode>
<comment>Foocomment</comment>
<glass_size>Fooglass_size</glass_size>
<vendor>Foovendor</vendor>
<trademark>Footrademark</trademark>
<fprice>Foofprice</fprice>
</part>
</object>
дает желаемый, правильный результат :
<table class="part">
<tr>
<td>Название</td>
<td>FooName</td>
</tr>
<tr>
<td>Модель</td>
<td>FooName</td>
</tr>
<tr>
<td>Год</td>
<td>FooName</td>
</tr>
<tr>
<td>Тип</td>
<td>Fooglass_type</td>
</tr>
<tr>
<td>Сканкод</td>
<td>Fooscancode</td>
</tr>
<tr>
<td>Еврокод</td>
<td>Fooeurocode</td>
</tr>
<tr>
<td>Комментарий</td>
<td>Foocomment</td>
</tr>
<tr>
<td>Размер</td>
<td>Fooglass_size</td>
</tr>
<tr>
<td>Производитель</td>
<td>Foovendor</td>
</tr>
<tr>
<td>Торговая марка</td>
<td>Footrademark</td>
</tr>
<tr>
<td>Цена</td>
<td>Foofprice</td>
</tr>
</table>
Примечание :
Словарь помещен в глобальный элемент пространства имен - только для демонстрационных целей, чтобы можно было представить все в одной таблице стилей.
В практических ситуациях словарь будет занимать собственный XML-файл . Тогда к нему будут обращаться:
<xsl:variable name="vRName">
<xsl:for-each select="document('dictionaryFileName.xml')">
<xsl:value-of select="key('kTranslate', $vName)"/>
</xsl:for-each>
</xsl:variable>