Попробуйте использовать это:
<xsl:key name="field-heading"
match="heading"
use="parent::column/@name" />
В этом случае ../
не будет работать, поскольку путь use
не начинается с корня.
РЕДАКТИРОВАТЬ
Попробуйте создать ключ, используя table/@name
вместе с column/@name
.Это должно сделать его уникальным.
XML Input (я надеюсь, что это представляет проблему из вашего комментария.)
<tables>
<table name="T01">
<columns>
<column name="F01">
<heading>Field 1</heading>
</column>
<column name="F02">
<heading>Field 2</heading>
</column>
</columns>
<rows>
<row>
<field name="F01">AAAAA</field>
<field name="F02">BBBBB</field>
</row>
<row>
<field name="F01">DDDDD</field>
<field name="F02">EEEEE</field>
</row>
</rows>
</table>
<table name="T02">
<columns>
<column name="F01">
<heading>Field A</heading>
</column>
<column name="F02">
<heading>Field B</heading>
</column>
</columns>
<rows>
<row>
<field name="F01">11111</field>
<field name="F02">22222</field>
</row>
<row>
<field name="F01">44444</field>
<field name="F02">55555</field>
</row>
</rows>
</table>
</tables>
Модифицированный XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- This won't work but if it did ... -->
<xsl:key name="field-heading"
match="heading"
use="concat(ancestor::table/@name,'+',parent::column/@name)" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="field">
<field name="{@name}">
<heading>
<xsl:value-of select="key('field-heading', concat(ancestor::table/@name,'+',@name))"/>
</heading>
<value>
<xsl:value-of select="."/>
</value>
</field>
</xsl:template>
<xsl:template match="columns"/>
</xsl:stylesheet>
Вывод XML
<tables>
<table name="T01">
<rows>
<row>
<field name="F01">
<heading>Field 1</heading>
<value>AAAAA</value>
</field>
<field name="F02">
<heading>Field 2</heading>
<value>BBBBB</value>
</field>
</row>
<row>
<field name="F01">
<heading>Field 1</heading>
<value>DDDDD</value>
</field>
<field name="F02">
<heading>Field 2</heading>
<value>EEEEE</value>
</field>
</row>
</rows>
</table>
<table name="T02">
<rows>
<row>
<field name="F01">
<heading>Field A</heading>
<value>11111</value>
</field>
<field name="F02">
<heading>Field B</heading>
<value>22222</value>
</field>
</row>
<row>
<field name="F01">
<heading>Field A</heading>
<value>44444</value>
</field>
<field name="F02">
<heading>Field B</heading>
<value>55555</value>
</field>
</row>
</rows>
</table>
</tables>