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?
Les fonctions de date sont disponibles nativement, telles que:
<xsl:value-of select="current-dateTime()"/>
Il y a aussi current-date()
et current-time()
.
Utilisez le package d’extension de date et heure EXSLT.
date.xsl
À l’emplacement de vos fichiers XSL.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>
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
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"/>
...
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()"/>
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.
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