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.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Exemple : A|C|C/c1|C/c2|F|G
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Je fais confiance aux experts, qui je m'en doute, connaissent déjà ce problème ainsi que sa solutionEn tous cas, je l'espère :p
Merci d'avance pour votre aide.
-Kirtap-
Partager