xslt <uso da chave = "posição ()" ../> problema

Tenho uma (planilha do excel muito parecida com ..) dados xml, a partir dos quais devo criar um mais legíve
Tenho os cabeçalhos na parte superior da estrutura e gostaria de criarelements pelo valor do texto e aplique-o no restante do document

Provavelmente os dados reais são mais claros, então meu documento de entrada se parece com

<?xml version="1.0"?>
<root>
    <headers>
        <header>line</header>
        <header>product</header>
        <header>order</header>
        <header>qty</header>
        <header>deadline</header>
    </headers>
    <row>
        <data>2</data>
        <data>HU12_SETUP</data>
        <data>16069061</data>
        <data>1</data>
        <data>2011-04-13T09:22:59.980</data>
    </row>
    <row>
        <data>1</data>
        <data>40PFL7605H/12</data>
        <data>16310360</data>
        <data>200</data>
        <data>2011-04-13T09:22:59.980</data>
    </row>
</root>

e meu objetivo é ter um documento xml como:

<?xml version="1.0"?>
<morning>
    <row>
        <line>2</line>
        <product>HU12_SETUP</product>
        <order>16069061</order>
        <qty>1</qty>
        <deadline>0</deadline>
    </row>
    <row>
        <line>1</line>
        <product>40PFL7605H/12</product>
        <order>16310360</order>
        <qty>200</qty>
        <deadline>77</deadline>
    </row>
</morning>

Eu gostaria de fazer isso de uma maneira "adequada" / "eficiente", é por isso que estou me voltando para vocês, pessoal, para me ajuda
Eu imaginei usando umkey para combinardata posições paraheaderosições @ seria minha solução, mas por algum motivo isso simplesmente não funciona (eu já sou ~ X ().

O que eu preciso é apontar o que há de errado com o meu xsl e / ou se houver algo errado com okey conceito, me aconselhe uma solução melhor.

Aqui está o meu (depuração) xsl:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:key name="header" match="header" use="position()" />

    <xsl:template match="/">
        <morning>
            <xsl:apply-templates />
        </morning>
    </xsl:template>
    <xsl:template match="headers" />
    <xsl:template match="row">
        <xsl:copy>
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="data">
        <xsl:element name="{concat('bla-',position())}">
            <xsl:value-of select="key('header',position())" />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

onde verifico se a posição () está realmente corret

Minha saída varia dependendo da versão da folha de estilo que eu us

output 1.0:

<?xml version='1.0' encoding='UTF-8' ?>
<morning>
  <row>
    <bla-1>line</bla-1>
    <bla-2/>
    <bla-3/>
    <bla-4/>
    <bla-5/>
  </row>
  <row>
    <bla-1>line</bla-1>
    <bla-2/>
    <bla-3/>
    <bla-4/>
    <bla-5/>
  </row>
</morning>

output 2.0:

<?xml version='1.0' encoding='UTF-8' ?>
<morning>
  <row>
    <bla-1>line product order qty deadline</bla-1>
    <bla-2/>
    <bla-3/>
    <bla-4/>
    <bla-5/>
  </row>
  <row>
    <bla-1>line product order qty deadline</bla-1>
    <bla-2/>
    <bla-3/>
    <bla-4/>
    <bla-5/>
  </row>
</morning>

Como você pode ver,key('header',position()) me fornece uma string vazia em todos os casos, exceto no primeiro (é por isso que eu tenho como valor, não o nome do elemento

Agradeço qualquer ajuda, agradeço antecipadamente!

Adiçã:
Com base nas respostas de LarsH e @ Alejandro (ainda presas a essakey coisa ...) eu vim com:

<xsl:template match="data">
    <xsl:variable name="posn" select="position()" />
    <xsl:element name="{key('header',1)[$posn]}" />
    <xsl:element name="{key('header',1)[position()]}" />
</xsl:template>

Consigo ver isso usando uma chave aqui com um @ estáti1 é idiota, mas estou ficando assustada porque os dois elementos resultantes lá de cima não combinam?
O primeiro está correto, o segundo sempre me dáline, respectivamentelineproductorderqtydeadline de volta

lguém poderia me indicar a direção cert

questionAnswers(2)

yourAnswerToTheQuestion