Bonjour
Voilà, je découvre XSLT et, même si j'ai trouvé plein d'infos très interressante à droite et à gauche, je bute sur un problème que je n'arrive pas à résoudre... Donc voilà...
Je veux créer différentes feuilles XSLT pour mettre en page des flux XML différents et ne représentant pas la même chose. En clair, ils n'ont rien à voir. Seulement, certaines fonctionnalités (par exemple le formatage d'une date en français) sont utilisées dans toutes ces XSLT et j'aimerai donc les externalisées. Pour ça, j'ai créé une fonction (ou dois-je dire template avec paramètre ?) qui formate une date passée en paramètre, que j'ai mis dans un fichier nommé common.xsl dans le but de l'inclure (ou importer ?) dans toutes mes XSLT. Seulement voilà, il ne trouve pas mon template "externe" au moment de l'utilisation...
Voici mon fichier "common.xsl" :
Et voici un exemple de XSLT l'incluant :
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 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="ISO-8859-1" /> <xsl:template name="FormateDate"> <xsl:param name="date" /> <xsl:variable name="year" select="substring($date, 1, 4)" /> <xsl:variable name="month" select="substring($date, 6, 2)" /> <xsl:variable name="day" select="substring($date, 9, 2)" /> <xsl:variable name="hour" select="substring($date, 12, 2)" /> <xsl:variable name="min" select="substring($date, 15, 2)" /> <xsl:variable name="sec" select="substring($date, 18, 2)" /> <xsl:value-of select="concat($day, '/', $month, '/', $year)" /> <xsl:text> </xsl:text> <xsl:value-of select="concat($hour, ':', $min, ':', $sec)" /> </xsl:template> </xsl:stylesheet>
Pour finir, voici la source XML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="common.xsl"/> <xsl:output method="html" encoding="ISO-8859-1" /> <xsl:template match="/date"> <p> <xsl:call-template name="FormateDate"> <xsl:with-param name="date" select="@value" /> </xsl:call-template> </p> </xsl:template> </xsl:stylesheet>
J'ai tenté de faire le plus simple possible pour que ce soit clair !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <?xml version="1.0" encoding="ISO-8859-1"?> <date value="2008-01-11 11:44:00.704" />
Par ailleurs, si ça peut être utile, je fais tout ça avec du ASP et voici ma page appelante :
Je croyais avoir tout bien fait et je me tape l'erreur suivante :
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 <%@ Language=VBScript %> <html> <head> <title>Petits tests</title> </head> <body> <% set oXsl = Server.CreateObject("MSXML2.DOMDocument.6.0") oXsl.load(Server.MapPath("test.xsl")) set oXml = Server.CreateObject("MSXML2.DOMDocument.6.0") oXml.load(Server.MapPath("test.xml")) Response.Write(oXml.transformNode(oXsl)) set oXsl = nothing set oXml = nothing %> </body> </html>
Merci déjà à ceux qui ont tout lu Et merci d'avance à ceux qui pourraient m'aider / me conseiller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 msxml6.dll error '80004005' Named template 'FormateDate' does not exist in the stylesheet. /pftl/petit_test.asp, line 12
Partager