xslt <key use = "position ()" ../> problem

Tengo una hoja de cálculo (muy excelente como ...) datos XML, a partir de los cuales se supone que debo crear una más legible.
Tengo los encabezados en la parte superior de la estructura, y me gustaría crearelements desde su valor de texto y aplicarlos en el resto del documento.

Probablemente los datos reales hablan más claro, por lo que mi documento de entrada se parece a

<?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>

y mi objetivo es tener un 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>

Me gustaría hacer esto de una manera "adecuada" / "eficiente", por eso me dirijo a ustedes, muchachos, para que me ayuden.
Pensé usando unkey para que coincida condata posiciones aheaderas posiciones @ serían mi solución, pero por alguna razón simplemente no funciona (ya estoy ~ X ().

o que necesito es señalar qué está mal con mi xsl, y / o si hay algo mal con lakey concepto, aconsejarme una mejor solución.

Aquí está mi (depuración) 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>

donde verifico que la posición () es realmente correcta.

Mi salida varía según la versión de hoja de estilo que use.

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 puedes ver,key('header',position()) me da una cadena vacía en todos los casos excepto el primero (es por eso que lo tengo como valor, no como nombre del elemento).

Agradecería cualquier ayuda, gracias de antemano!

Adició:
Basado en la respuesta de @ LarsH y @Alejandro (todavía atascado en estakey cosa ...) Se me ocurrió:

<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>

Puedo ver que usando una clave aquí con una @ estáti1 es tonto, pero me da miedo ¿por qué los dos elementos resultantes de allí arriba no coinciden?
El primero es correcto, el segundo siempre me daline, respectivamentelineproductorderqtydeadline espalda

¿Alguien podría señalarme en la dirección correcta?

Respuestas a la pregunta(2)

Su respuesta a la pregunta