IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] Import de feuille et utilisation de template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Invité
    Invité(e)
    Par défaut [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 : 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>
    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
    <?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 : 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" />
    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 : 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>
    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
    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
    Dernière modification par Invité ; 15/01/2008 à 11h53.

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Il se peut que ce soit un problème de chemin par défaut qui n'est pas correct : essayez en mettant tout dans la même feuille de style, forcez le chemin en dur, ...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Si je déplace mon template "FormateDate" dans ma feuille XSLT directement ça fonctionne sans problème...
    J'ai tenté en mettant le chemin absolu de la feuille XSLT incluse, mais cela ne fonctionne pas mieux...

    Merci quand même

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon, en continuant mes recherches, j'ai trouvé, dans les msdn, un exemple d'import de fichier avec définition d'un template qui est construit exactement comme le mien (voici le lien)...
    Je vais voir si, peut-être, le problème ne viendrait pas d'ASP, mais en attendant, personne n'a une autre idée ?

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    pas trop d'idée sur l'origine précise du problème, peut-être essayer 2 choses :
    - S'assurer que le fichier common.xsl est dans le même répertoire que le fichier appelant
    - Utiliser xsl:include plutôt que xsl:import (qui ne se justifie d'ailleurs pas dans ce cas de figure)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Le fichier est bien dans le même répertoire et j'avais essayé avec include à la place de import, cela n'avait rien changé... Je pense que ça doit quand même venir d'ASP parce que j'ai testé la transformation directement dans Fifrefox avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml-stylesheet type="text/xsl" href="test.xsl"?>
    ça fonctionne très bien...

    Merci quand même

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re ! Bon, en cherchant tout à fait autre chose (pour la petite histoire, je cherchais comment pouvoir fournir des paramètres à ma feuille XSL avant de transformer le XML en ASP), j'ai trouvé une autre méthode qui fonctionne très bien en faisant tout ça avec un IXSLTemplate et un IXSLProcessor.

    (Pour ceux qui voudraient plus de détail : voir ici)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/01/2013, 10h11
  2. [XSLT] import de feuille de style
    Par melsanka dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 30/11/2009, 15h44
  3. [XSLT] import feuilles xsl
    Par pixigol dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 07/12/2008, 13h06
  4. [XSLT] Utilisation variable template
    Par mihaestii dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 23/11/2005, 15h44
  5. Utilisation de template dans un role de fonctions/procedures
    Par Punky65250 dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 01/09/2004, 10h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo