rahhh, c'est bien XSL, mais y'a vraiment des caps à franchir plutôt frustrants, grrrr.
J'ai un template qui est appelé mais le paramètre passé lors de l'appel n'est pas réellement transmis. Et je ne vois pas la raison obscure de la force
soit le doc XML :
et le doc XSL :
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 <DATAS> <STAGIAIRES> <STAGIAIRE> <NOM>JAMES</NOM> <PRENOM>Sylvain</PRENOM> </STAGIAIRE> <STAGIAIRE> <NOM>TOTO</NOM> <PRENOM>Ratagno</PRENOM> </STAGIAIRE> </STAGIAIRES> <html> <head> <title>essai template</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> </head> <body> <table width="50%" border="1"> <tr> <td> <a name="nom"/> </td> <td> <a name="prenom"/> </td> </tr> </table> </body> </html> </DATAS>
Le template match="STAGIAIRE" déclenche l'appel des templates matchant //html mais surtout en passant en paramètre le stagiaire courant.
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 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="html//*"> <xsl:param name="stagiaire"/> <xsl:if test="name() ='a'"> <xsl:value-of select="$stagiaire/NOM"/> </xsl:if> <xsl:if test="name() !='a'"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:if> </xsl:template> <xsl:template match="STAGIAIRE"> <xsl:apply-templates select="//html"> <xsl:with-param name="stagiaire" select="."/> </xsl:apply-templates> </xsl:template> </xsl:stylesheet>
Ensuite le template <xsl:template match="html//*"> est déclenché mais à la lecture du parmaètre on a rien quedale. rah.
Si j'ajoute une règle, et que je l'appelle avec Call-Template en passant le même paramètre, cette fois il est bien passé.
J'en déduis que le paramètre doit être lié au noeud contexte quelque part, non ?
Sylvain
Partager