Rassembler plusieurs éléments dans les attributs d'un unique élément
Bonjour,
Je viens vous faire part de mon problème qui est pour un moi vrai casse-tête.
J'ai dans mon XML de départ, des données qui sont structurées de la sorte :
Code:
1 2 3 4 5 6 7
|
<Element Type="Max" >
<Data Name="01-01" Value="1.5" />
<Data Name="01-02" Value="2.5" />
<Data Name="01-03" Value="3.5" />
<Data Name="01-04" Value="4.5" />
</Element> |
J'aimerais obtenir un XML en sortie, rassemblant toutes mes données contenues dans <Data/>, dans une seule balise <Element/>, comme cela :
Code:
1 2
|
<Element Type="Max" 01-01 ="1.5" 01-02 ="2.5" 01-03 ="3.5" /> |
J'ai donc tenter dans mon document XSLT de faire un template qui écrit cette ligne, à chaque occurence de "element".
Seulement, je n'arrive pas mémoriser les valeurs de chaque Data pour les écrire en une seule ligne... Voici mon code, cela sera peut-être plus explicite :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
<xsl:template match="/.../Element">
<xsl:for-each select="Data">
<xsl:variable name="01-01">
<xsl:if test="@Name='01-01'">
<xsl:value-of select="@Value"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="01-02">
<xsl:if test="@Name='01-02'">
<xsl:value-of select="@Value"/>
</xsl:if>
</xsl:variable>
<xsl:if test="$01-01 != '' and $01-02 != '' ">
<Element>
<xsl:attribute name="$01-01"><xsl:value-of select="$01-01"/></xsl:attribute>
<xsl:attribute name="01-02"><xsl:value-of select="$01-02"/></xsl:attribute>
</Element>
</xsl:if>
</xsl:for-each>
</xsl:template |
Evidemment ce n'est pas fonctionnel, étant donné qu'à chaque passage de boucle for-each, une des deux variable est reinitialisée à vide, et donc la condition ($01-01 != ' ' and $01-02 != ' ') n'est jamais remplie.
J'ai beau tourner le problème dans tous les sens, je n'arrive pas à m'en sortir, je suis toujours confronté à un problème sur l'étendue de ma variable...
Je ne trouve pas non plus de solution en utilisant param et with-param...
Merci pour votre aide.