Bonjour,
Suite à mon post sur la possibilité de modifier une variable par une astuce (je sais c'est impossible) je me permets de vous présenter donc une "astuce" qui remplit les conditions dont j'ai besoin et qui peut peut-être vous servir.
Admettons que je passe une variable à un template et que je souhaite récupérer sa valeur modifiée. Dans ce cas, il suffit de faire quelquechose de ce style:
et dans le template, de renvoyer la "nouvelle" valeur de la variable myVar. On se retrouve alors avec une nouvelle variable, mais qui porte le même nom, et avec la valeur modifiée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <xsl:variable name="myVar"> <xsl:call-template name="myTemplate"> <xsl:with-param name="myParam"><xsl:value-of select="$myVar"/></xsl:with-param> </xsl:call-template> </xsl:variable>
Par contre, lorsque dans le template, on souhaite aussi "sortir" des données dans le fichier de sortie, on se retrouve coincé, on ne peut plus remonter la nouvelle valeur de la variable.
Maintenant, voilà "l'astuce" pour remonter les données de sortie pour le fichier ET la nouvelle valeur de la variable :
Exemple de template
L'appel de mon template permettant de récupérer la nouvelle valeur:
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
20
21
22
23
24
25
26
27
28
29
30
31 <xsl:template name="myTemplate"> <xsl:param name="myParam"/> <!-- Retrieve 3 first char from param --> <xsl:variable name="localVar"> <xsl:value-of select="substring($myParam, 1,3)"/> </xsl:variable> <!-- remove 3 first char from var to be returned --> <xsl:variable name="returnedVar"> <xsl:value-of select="substring($myParam, 4)"/> </xsl:variable> <!-- Define XML output --> <xsl:variable name="outputXML"> <myTag> <xsl:value-of select="$localVar"/> </myTag> </xsl:variable> <!-- Returns combination of new var value, and XML output --> <output> <returnedValue> <xsl:value-of select="$returnedVar"/> </returnedValue> <outputXML> <xsl:copy-of select="$outputXML"/> </outputXML> </output> </xsl:template>
Dans la variable myVar, après l'appel de mon template j'ai bien "CDEFGHIJK" et dans outputXML j'ai ce que je veux mettre dans mon fichier de sortie : <myTag>ABC</myTag>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <xsl:variable name="myVar">ABCDEFGHIJK</xsl:variable> <!-- set output data --> <xsl:variable name="tmp"> <xsl:call-template name="myTemplate"> <xsl:with-param name="myParam"><xsl:value-of select="$myVar"/></xsl:with-param> </xsl:call-template> </xsl:variable> <!-- Separate new returned value from output XML --> <xsl:variable name="myVar"><xsl:value-of select="$tmp/output/returnedValue"/></xsl:variable> <xsl:variable name="outputXML"><xsl:copy-of select="$tmp/output/outputXML/*"/></xsl:variable>
Qu'en pensez-vous?
Partager