[XSLT] Import de feuille et utilisation de template
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" :
Code:
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> |
Et voici un exemple de XSLT l'incluant :
Code:
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> |
Pour finir, voici la source XML :
Code:
1 2 3
| <?xml version="1.0" encoding="ISO-8859-1"?>
<date value="2008-01-11 11:44:00.704" /> |
J'ai tenté de faire le plus simple possible pour que ce soit clair !
Par ailleurs, si ça peut être utile, je fais tout ça avec du ASP et voici ma page appelante :
Code:
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> |
Je croyais avoir tout bien fait et je me tape l'erreur suivante :cry: :
Code:
1 2 3 4 5
| msxml6.dll error '80004005'
Named template 'FormateDate' does not exist in the stylesheet.
/pftl/petit_test.asp, line 12 |
Merci déjà à ceux qui ont tout lu ;) Et merci d'avance à ceux qui pourraient m'aider / me conseiller ;)