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 :

Comment obtenir la date du jour ?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Comment obtenir la date du jour ?
    Bonjour à tout le monde,

    j'essaye d'implémenter et d'afficher la date du jour dans ma feuille de style XSL, mais j'obtiens ce message d'erreur lors de la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERROR:  'Impossible de compiler la feuille de style'
    FATAL ERROR:  'Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'.'
               :Erreur lors de la vérification du type de l'expression 'funcall(current-date, [])'.
    Voici un extrait de ma feuille de style 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	version="2.0">
    	<xsl:output method="html" indent="yes" />
     
           ...
     
    		<xsl:template name="getMonth">
    				<xsl:param name="monthNbr" />
    				<xsl:choose>
    					<xsl:when test="$monthNbr=1">
    						Janvier
    					</xsl:when>
    					<xsl:when test="$monthNbr=2">
    						Février
    					</xsl:when>
    					<xsl:when test="$monthNbr=3">
    						Mars
    					</xsl:when>
    					<xsl:when test="$monthNbr=4">
    						Avril
    					</xsl:when>
    					<xsl:when test="$monthNbr=5">
    						Mai
    					</xsl:when>
    					<xsl:when test="$monthNbr=6">
    						Juin
    					</xsl:when>
    					<xsl:when test="$monthNbr=7">
    						Juillet
    					</xsl:when>
    					<xsl:when test="$monthNbr=8">
    						Août
    					</xsl:when>
    					<xsl:when test="$monthNbr=9">
    						Septembre
    					</xsl:when>
    					<xsl:when test="$monthNbr=10">
    						Octobre
    					</xsl:when>
    					<xsl:when test="$monthNbr=11">
    						Novembre
    					</xsl:when>
    					<xsl:when test="$monthNbr=12">
    						Décembre
    					</xsl:when>
    				</xsl:choose>
    		</xsl:template>
     
    		<xsl:template name="date_jour">
    				<xsl:variable name="currentDate" select="current-date()" />
     
    				<xsl:variable name="year" select="year-from-date($currentDate)" />
    				<xsl:variable name="month">
    					<xsl:call-template name="getMonth">
    						<xsl:with-param name="monthNbr"
    							select="month-from-date($currentDate)" />
    					</xsl:call-template>
    				</xsl:variable>
    				<xsl:variable name="day" select="day-from-date($currentDate)" />
    				<xsl:value-of select="format-number($day,'00')" />
    				<xsl:text> </xsl:text>
    				<xsl:value-of select="$month" />
    				<xsl:text> </xsl:text>
    				<xsl:value-of select="$year" />
    		</xsl:template>
    ...
     
    </xsl:stylesheet>
    Si vous avez une idée ? je suis preneur

    merci par avance

    Fabrice

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Ton code est très bien.

    Mais, ce message d'erreur est typique de Xalan, et Xalan ne gère que XSLT 1.0, pas 2.0. Et les fonctions d'opérations sur dates, ne sont gérées qu'avec XSLT 2.0.

    En XSLT 1.0, pour obtenir la date du jour... Eh bien il n'y a rien de prévu.
    Parmis les solutions possibles on peut envisager :
    - passer la date du jour en paramètre de la feuille de style. Il faudra aussi adapter pour en déduire l'année et le mois en cours, ces fonctions n'étant pas non plus dispos.

    - utiliser le mécanisme de fonctions d'extensions de Xalan, pour appeler directement des classes Java et s'en servir pour générer la date du jour, et en tirer l'année et le mois. Mais la feuille de style ne sera utilisable que par Xalan-J, et éventuellement Saxon-J qui gère le même mécanisme (mais qui, lui, gère parfaitement XSLT 2.0 et n'avait pas besoin de cette gymnastique).

    Autre solution : utiliser Saxon à la place, ou n'importe quel moteur XSLT compatible 2.0
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ton code est très bien.

    Mais, ce message d'erreur est typique de Xalan, et Xalan ne gère que XSLT 1.0, pas 2.0. Et les fonctions d'opérations sur dates, ne sont gérées qu'avec XSLT 2.0.

    En XSLT 1.0, pour obtenir la date du jour... Eh bien il n'y a rien de prévu.
    Parmis les solutions possibles on peut envisager :
    - passer la date du jour en paramètre de la feuille de style. Il faudra aussi adapter pour en déduire l'année et le mois en cours, ces fonctions n'étant pas non plus dispos.

    - utiliser le mécanisme de fonctions d'extensions de Xalan, pour appeler directement des classes Java et s'en servir pour générer la date du jour, et en tirer l'année et le mois. Mais la feuille de style ne sera utilisable que par Xalan-J, et éventuellement Saxon-J qui gère le même mécanisme (mais qui, lui, gère parfaitement XSLT 2.0 et n'avait pas besoin de cette gymnastique).

    Autre solution : utiliser Saxon à la place, ou n'importe quel moteur XSLT compatible 2.0
    Merci pour les infos.

    J'ai modifié ma feuille de style :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:fo="http://www.w3.org/1999/XSL/format" xmlns:cal="xalan//java.util.GregorianCalendar"
    	version="2.0">
    	<xsl:output method="html" indent="yes" />
     
    ...
     
    		<xsl:template name="getMonth">
    				<xsl:param name="monthNbr" />
    				<xsl:choose>
    					<xsl:when test="$monthNbr=1">
    						Janvier
    					</xsl:when>
    					<xsl:when test="$monthNbr=2">
    						Février
    					</xsl:when>
    					<xsl:when test="$monthNbr=3">
    						Mars
    					</xsl:when>
    					<xsl:when test="$monthNbr=4">
    						Avril
    					</xsl:when>
    					<xsl:when test="$monthNbr=5">
    						Mai
    					</xsl:when>
    					<xsl:when test="$monthNbr=6">
    						Juin
    					</xsl:when>
    					<xsl:when test="$monthNbr=7">
    						Juillet
    					</xsl:when>
    					<xsl:when test="$monthNbr=8">
    						Août
    					</xsl:when>
    					<xsl:when test="$monthNbr=9">
    						Septembre
    					</xsl:when>
    					<xsl:when test="$monthNbr=10">
    						Octobre
    					</xsl:when>
    					<xsl:when test="$monthNbr=11">
    						Novembre
    					</xsl:when>
    					<xsl:when test="$monthNbr=12">
    						Décembre
    					</xsl:when>
    				</xsl:choose>
    			</xsl:template>
     
    		<xsl:template name="getCurrentDate">
    				<xsl:variable name="calendar" select="cal:new()" />
     
    				<xsl:variable name="day" select="cal:get($calendar,5)" />
     
    				<xsl:variable name="month">
    					<xsl:call-template name="getMonth">
    						<xsl:with-param name="monthNbr" select="cal:get($calendar,2) + 1" />
    					</xsl:call-template>
    				</xsl:variable>
     
    				<xsl:variable name="year" select="cal:get($calendar,1)" />
     
    				<xsl:value-of select="$day" />
    				<xsl:text>/</xsl:text>
    				<xsl:value-of select="$month" />
    				<xsl:text>/</xsl:text>
    				<xsl:value-of select="$year" />
    			</xsl:template>
     
    			<xsl:variable name="currentDate">
    				<xsl:call-template name="getCurrentDate"></xsl:call-template>
    			</xsl:variable>
     
    ...
     
    </xsl:stylesheet>
    J'obtiens un nouveau message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Exception in thread "main" java.lang.VerifyError: (class: _dt, method: template$dot$1 signature: (Lcom/sun/org/apache/xalan/internal/xsltc/DOM;Lcom/sun/org/apache/xml/internal/dtm/DTMAxisIterator;Lcom/sun/org/apache/xml/internal/serializer/SerializationHandler;I)V) Accessing value from uninitialized register 5
    	at java.lang.Class.getDeclaredConstructors0(Native Method)
    	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2664)
    	at java.lang.Class.getConstructor0(Class.java:3068)
    	at java.lang.Class.newInstance(Class.java:407)
    	at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getTransletInstance(TemplatesImpl.java:387)
    	at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.newTransformer(TemplatesImpl.java:418)
    	at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:767)
    	at test.xsl.XMLwithXSLT.main(XMLwithXSLT.java:18)
    Une idée ?

  4. #4
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Salut; puisque ton résultat est du html tu peux introduire au début de ta transformation un petit
    bout de javascript entre 2 balises <script> qui t'affichera la date du jour.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par iback Voir le message
    J'obtiens un nouveau message d'erreur :
    VerifierError est une erreur très sérieuse de Java et n'a rien à voir avec XSLT. Elle indique qu'une classe Java qu'on essaie de charger n'est pas cohérente ou cherche à échapper à ses restrictions d'accès, bref que la classe est pas bien.
    Ce qui est invraisemblable pour les classes Xalan livrées en interne avec Java. Je pense que certains de tes fichiers sont corrompus.

    Une idée serait de désinstaller Java, puis de le réinstaller avec un installateur fraîchement téléchargé d'Oracle.


    Citation Envoyé par exe2bin Voir le message
    Salut; puisque ton résultat est du html tu peux introduire au début de ta transformation un petit
    bout de javascript entre 2 balises <script> qui t'affichera la date du jour.
    Encore faut-il que ce soit vraiment du HTML et que le client visé gère JavaScript et le fasse bien.
    Mais si c'est le cas, c'est une pirouette maline pour résoudre le problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Essaies cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <script type="text/javascript">
    	var aujourd_hui = new Date();
    	document.writeln(aujourd_hui.getDate() + "/"+
            (aujourd_hui.getMonth()+1)+"/"+
            aujourd_hui.getFullYear());
    </script>

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/09/2006, 15h51
  2. [C#]comment obtenir la date du jour?
    Par bakonu dans le forum C#
    Réponses: 2
    Dernier message: 03/11/2005, 12h58
  3. Comment obtenir la date de début d'une semaine ?
    Par Vodkha dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2005, 10h54
  4. Comment obtenir le nombre de jours entre deux timedatepicker
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2005, 12h59

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