test create content condicional xslt xhtml

create - ¿Puede un XSLT insertar la fecha actual?



xslt templates (6)

XSLT 2

Las funciones de fecha están disponibles de forma nativa, como:

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

También hay current-date() y current-time() .

XSLT 1

Use el paquete EXSLT de fecha y hora de extensión.

  1. Descargue el paquete de fecha y hora de GitHub .
  2. Extraiga date.xsl a la ubicación de sus archivos XSL.
  3. Establecer el encabezado de la hoja de estilo.
  4. Importar date.xsl .

Por ejemplo:

<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>

Un programa que usamos en mi oficina exporta informes traduciendo un archivo XML que exporta con un archivo XSLT a XHTML. Estoy reescribiendo el XSLT para cambiar el formato y para agregar más información del archivo XML de origen.

Me gustaría incluir la fecha en que se creó el archivo en el informe final. Pero la fecha / hora actual no está incluida en el archivo XML original, ni tengo ningún control sobre cómo se crea el archivo XML. No parece haber ninguna función de fecha en XSLT que devuelva la fecha actual.

¿Alguien tiene alguna idea de cómo podría incluir la fecha actual durante mi transformación XSLT?


Última respuesta, pero mi solución funciona en Eclipse XSLT. Eclipse usa XSLT 1 al momento de escribir esto. Puede instalar un motor XSLT 2 como Saxon. O puede usar la solución XSLT 1 a continuación para insertar la fecha y la hora actuales.

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

Esto llamará a la clase de datos de Java para generar la fecha. No funcionará a menos que también coloque la siguiente definición "java:" en su etiqueta <xsl:stylesheet> .

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

Espero que ayude a alguien. Esta simple respuesta fue difícil de encontrar para mí.


¿Tienes control sobre ejecutar la transformación? De ser así, podría pasar la fecha actual al XSL y usar $ current-date desde dentro de su XSL. A continuación se muestra cómo declara el parámetro entrante, pero al saber cómo está ejecutando la transformación, no puedo decirle cómo pasar el valor.

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

Por ejemplo, desde el script bash, use:

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

Luego, en xsl puedes usar:

<xsl:value-of select="$current-date"/>


Para el analizador MSXML, intente esto:

<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>

Lea también XSLT Stylesheet Scripting usando msxsl: script y Extender XSLT con JScript, C # y Visual Basic .NET


... 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()"/>


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.

referencia: formateo de fechas y horas con XSLT 2.0 y XPath