[XSL] Accès aux attributs d'un noeud référencé par item d'une liste
Bonjour à tous,
je souhaite accèder aux noeuds d'un arbre via des chemins relatifs contenus dans une liste.
Contexte:
J'ai une chaîne contenant une liste de chemins relatifs (à la racine) de noeuds séparés par un '|' qui représente une arborescence ordonnée de mes noeuds XML.
NB : cette chaîne est déjà ordonnée.
Code:
1 2
| Exemple :
A|C|C/c1|C/c2|F|G |
J'ai un arbre XML qui contient tous les noeuds (avec un identifiant unique) qui peuvent apparaître dans cette liste ordonnée, et je souhaite ne traiter que les noeuds de la liste.
Code:
1 2 3 4 5 6 7 8 9 10 11
| <Root>
<A>...</A>
<B>...</B>
<C>...</C>
<c1>...</c1>
<c2>...</c2>
<D>...</D>
<E>...</E>
<F>...</F>
<G>...</G>
</Root> |
Pour ce qui est de parser la chaîne et traiter chaque item l'un après l'autre, j'ai procédé par récursivité. J'arrive à obtenir le chemin complet du noeud que je souhaite traiter mais je ne parviens pas à accéder à ses attributs.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
<xsl:template name="ProcessNode">
<xsl:param name="sInputString"/>
<xsl:variable name="token" select="substring-before($sInputString, '|')"/>
<xsl:variable name="nextToken" select="substring-after($sInputString, '|')"/>
<xsl:if test="$token">
// voici où se trouve mon problème
<xsl:for-each select="/ValuesTree/$token/@*">
// traitement des attributs
</xsl:for-each>
</xsl:if>
<xsl:if test="$nextToken">
<xsl:call-template name="ProcessNode">
<xsl:with-param name="sInputString" select="$nextToken"/>
</xsl:call-template>
</xsl:if>
</xsl:template> |
Là, dans l'exemple, j'ai mis le select le plus simpliste pour être clair sur ce que je tente de faire depuis ce matin.
Je fais confiance aux experts, qui je m'en doute, connaissent déjà ce problème ainsi que sa solution :king: En tous cas, je l'espère :p
Merci d'avance pour votre aide.
-Kirtap-