web-dev-qa-db-fra.com

Un XSLT peut-il insérer la date du jour?

Un programme que nous utilisons dans mon bureau exporte les rapports en traduisant un fichier XML qu’il exporte avec un fichier XSLT en XHTML. Je suis en train de réécrire le XSLT pour changer le formatage et ajouter plus d'informations à partir du fichier XML source.

J'aimerais inclure la date de création du fichier dans le rapport final. Mais la date et l'heure actuelles ne sont pas incluses dans le fichier XML d'origine, et je n'ai aucun contrôle sur la manière dont le fichier XML est créé. Il ne semble pas y avoir de fonction de date intégrée à XSLT pouvant renvoyer la date actuelle.

Quelqu'un a-t-il une idée de la manière dont je pourrais inclure la date actuelle lors de ma transformation XSLT?

88
Eric Anastas

XSLT 2

Les fonctions de date sont disponibles nativement, telles que:

<xsl:value-of  select="current-dateTime()"/>

Il y a aussi current-date() et current-time().

XSLT 1

Utilisez le package d’extension de date et heure EXSLT.

  1. Téléchargez le package date et heure de GitHub .
  2. Extrayez date.xsl À l’emplacement de vos fichiers XSL.
  3. Définissez l'en-tête de la feuille de style.
  4. Importer date.xsl.

Par exemple:

<xsl:stylesheet version="1.0" 
    xmlns:date="http://exslt.org/dates-and-times" 
    extension-element-prefixes="date"
    ...>

    <xsl:import href="date.xsl" />

    <xsl:template match="//root">
       <xsl:value-of select="date:date-time()"/>
    </xsl:template>
</xsl:stylesheet>
111
Jim Garrison

Pour l'analyseur MSXML, essayez ceci:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-Microsoft-com:xslt"
                xmlns:my="urn:sample" extension-element-prefixes="msxml">

    <msxsl:script language="JScript" implements-prefix="my">
       function today()
       {
          return new Date(); 
       } 
    </msxsl:script> 
    <xsl:template match="/">

        Today = <xsl:value-of select="my:today()"/>

    </xsl:template> 
</xsl:stylesheet>

Lisez également Script de feuille de style XSLT utilisant msxsl: script et Extension de XSLT avec JScript, C # et Visual Basic .NET

14
Rubens Farias

Avez-vous le contrôle sur l'exécution de la transformation? Si tel est le cas, vous pouvez transmettre la date du jour au fichier XSL et utiliser $ date-actuelle depuis votre fichier XSL. Voici comment vous déclarez le paramètre entrant, mais sachant comment vous exécutez la transformation, je ne peux pas vous dire comment transmettre la valeur.

<xsl:param name="current-date" />

Par exemple, à partir du script bash, utilisez:

xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml

Ensuite, dans le fichier xsl, vous pouvez utiliser:

<xsl:value-of select="$current-date"/>
14
Kevin Hakanson
...
    xmlns:msxsl="urn:schemas-Microsoft-com:xslt"
    xmlns:local="urn:local" extension-element-prefixes="msxsl">

    <msxsl:script language="CSharp" implements-prefix="local">
        public string dateTimeNow()
        {       
          return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
        } 
    </msxsl:script>  
...
    <xsl:value-of select="local:dateTimeNow()"/>
10
Evgeny Glazov

Réponse tardive, mais ma solution fonctionne sous Eclipse XSLT. Eclipse utilise XSLT 1 au moment de l'écriture. Vous pouvez installer un moteur XSLT 2 comme Saxon. Ou vous pouvez utiliser la solution XSLT 1 ci-dessous pour insérer la date et l'heure actuelles.

<xsl:value-of select="Java:util.Date.new()"/>

Ceci appellera la classe de données Java pour afficher la date. Cela ne fonctionnera que si vous mettez également la définition "Java:" suivante dans votre <xsl:stylesheet> tag.

<xsl:stylesheet [...snip...]
         xmlns:Java="Java"
         [...snip...]>

J'espère que cela aide quelqu'un. Cette réponse simple était difficile à trouver pour moi.

7
Mark Hamby
format-date(current-date(), '[M01]/[D01]/[Y0001]') = 09/19/2013
format-time(current-time(), '[H01]:[m01] [z]') = 09:26 GMT+10
format-dateTime(current-dateTime(), '[h1]:[m01] [P] on [MNn] [D].') = 9:26 a.m. on September 19.

référence: Formatage des dates et des heures avec XSLT 2.0 et XPath

5
Black