[XSLT] Récupérer une valeur pour un id donné
Bonjour,
Je souhaite faire une transformation d'un fichier XML vers un autre fichier XML grâce à une transformation XSL.
Dans mon fichier XML d'entrée, j'ai quelque chose du type :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <body>
<element1>
<sous-element1>
<attribut1>
...
</attribut1>
<attribut2 idRef="idAttRef2"/>
</sous-element1>
<sous-element2>
...
</sous-element2>
</element1>
<_REFERENCED>
<attributRef1 id="idAttRef1">
<info1>valeur1</info1>
...
</attributRef1>
<attributRef1 id="idAttRef2">
<info1>valeur2</info1>
...
</attributRef1>
...
</_REFERENCED> |
Je souhaite récupérer la valeur de l'élément "info1" de l'attribut référencé dans mon élément "attribut2".
J'ai définie une clé sur l'idRef, mais quand j'essaie de récupérer la valeur il me met la première valeur qu'il rencontre et non pas celle associée à l'id.
J'obtiens "valeur1" tout le temps.
Voici ce que j'ai codé :
Code:
1 2 3
| <xsl:key name="idRefAtt" match="body/element1/sous-element1/attribut2" use="@idRef"/>
<xsl:value-of select="key('idRefAtt',body/_REFERENCED/attributRef1/@id)/../../_REFERENCED/attributRef1/info1"/> |
Si quelqu'un a une idée, parce là vraiment je bloque.
Merci d'avance!
suite un peu plus complexe
Bonjour,
J'arrive maintenant à récupérer un élément pour un id donné mais lorsque j'ai deux éléments je n'arrive pas à récupérer les valeurs des deux.
Voilà ce que j'ai dans mon fichier XML :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <body>
<ajoutClient>
<client>
<civilite>
...
</civilite>
<sonAdresse idRef="idAttRef1"/>
<sonAdresse idRef="idAttRef2"/>
</client>
<produit>
...
</produit>
</ajoutClient>
<_REFERENCED>
<adresse id="idAttRef1">
<info1>valeur1</info1>
...
</adresse>
<adresse id="idAttRef2">
<info1>valeur2</info1>
...
</adresse>
...
</_REFERENCED> |
Je souhaite afficher les deux adresses.
J'ai défini dans le fichier XSL :
Code:
1 2
|
<xsl:key name="idRefAtt" match="body/ajoutClient/client/sonAdresse" use="@idRef"/> |
Comment puis-je faire pour afficher les deux adresses?
Dans mon fichier XSL j'utilise également xsl:template et xsl:call-template.