Bonjour,
Je m'essaye actuellement aux XSLT et je bloque sur un point précis : contourner l'impossibilité de modifier une variable. En fait j'ai une suite de caractères que je veux modifier au fur et à mesure de l'application de mes différents templates.
Prenons un exemple simple :
chaineTest = "11"
valeur= "ABCDEFGHIJK"
La chaine de test va me servir a faire des conditions pour découper la chaine "valeur"
1/ Si le premier caractère de "chaineTest" vaut 1 alors je veux récupérer les 3 premiers caractères de la chaine valeur (et donc les retirer de cette variable)
2/ si le deuxieme caractère de "chaineTest" vaut 1 je veux récupérer les 4 premiers caractères de valeur (restants).
Ca donnerait ca en sortie avec chaineTest = 11:
<noeud1>ABC</noeud1>
<noeud2>DEFG</noeud2>
Par contre avec chaineTest = 01 j'aurai ca:
<noeud2>ABCD</noeud2>
Maintenant mon XSL ressemble a ca:
Le problème qui se pose est que j'ai beau modifier la valeur de la variable valeur dans le if, quand je passe au if suivant la variable n'a pas changé :
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
18
19 <xsl:template name="MonTemplate"> <xsl:variable name="chaineTest">11</xsl:variable> <xsl:variable name="valeur">ABCDEFGHIJK</xsl:variable> <xsl:if test="substring($chaineTest, 1, 1) = string(1)"> <noeud1><xsl:value-of select="substring($valeur,1,3)"/></noeud1> <!-- Retire les trois premiers caractères de valeur --> <xsl:variable name="valeur"><xsl:value-of select="substring($valeur,4)"/></xsl:variable> </xsl:if> <xsl:if test="substring($chaineTest, 2, 1) = string(1)"> <noeud1><xsl:value-of select="substring($valeur,1,4)"/></noeud1> <!-- Retire les quatre premiers caractères de valeur --> <xsl:variable name="valeur"><xsl:value-of select="substring($valeur,5)"/></xsl:variable> </xsl:if> </xsl:template>
Je ne trouve pas de solutions propres pour contourner le problème. Je ne peux en effet pas renvoyer la nouvelle valeur depuis un template vu que j'ai aussi besoin d'écrire en sortie dans mon XML les valeurs des noeuds.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <noeud1>ABC</noeud1> <noeud1>ABCD</noeud1>
Est-il possible d'avoir des paramètres entrants et sortants dans les template, ou de modifier une variable par une astuce particulière?
Merci d'avance!
Koopajah
Partager