Un XSLT può inserire la data corrente?

Un programma che utilizziamo nel mio ufficio esporta report traducendo un file XML che esporta con un file XSLT in XHTML. Sto riscrivendo XSLT per modificare la formattazione e aggiungere ulteriori informazioni dal file XML di origine.

Mi piacerebbe includere la data in cui il file è stato creato nel rapporto finale. Ma la data / ora corrente non è inclusa nel file XML originale, né ho alcun controllo su come viene creato il file XML. Non sembra esserci alcuna funzione di data che costruisca in XSLT che restituirà la data corrente.

Qualcuno ha idea di come potrei essere in grado di includere la data corrente durante la mia trasformazione XSLT?

XSLT 2

Le funzioni di data sono disponibili in modo nativo, come ad esempio:

 

C’è anche la current-date() e l’ora current-time() .

XSLT 1

Utilizzare il pacchetto di estensione data e ora EXSLT.

  1. Scarica il pacchetto data e orari da GitHub .
  2. Estrai date.xsl nella posizione dei tuoi file XSL.
  3. Imposta l’intestazione del foglio di stile.
  4. Importa date.xsl .

Per esempio:

       

Per il parser MSXML, prova questo:

   function today() { return new Date(); }   Today =    

Leggi anche XSLT Stylesheet Scripting usando msxsl: script ed Estendi XSLT con JScript, C # e Visual Basic .NET

Hai il controllo sulla gestione della trasformazione? In tal caso, puoi passare la data corrente all’XSL e utilizzare $ current-date dall’interno del tuo XSL. Di seguito è riportato il modo in cui si dichiara il parametro in ingresso, ma con la conoscenza di come si sta eseguendo la trasformazione, non posso dirvi come passare il valore.

  

Ad esempio, dallo script bash, utilizzare:

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

Quindi, in xsl puoi usare:

  
 ... xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:local="urn:local" extension-element-prefixes="msxsl">  public string dateTimeNow() { return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); }  ...  

Risposta tardiva, ma la mia soluzione funziona in Eclipse XSLT. Eclipse utilizza XSLT 1 al momento della stesura di questo documento. È ansible installare un motore XSLT 2 come Saxon. Oppure puoi utilizzare la seguente soluzione XSLT 1 per inserire la data e l’ora correnti.

  

Questo chiamerà la class Data di Java per l’output della data. Non funzionerà se non imposti anche la seguente definizione “java:” nel tuo .

  

Spero che aiuti qualcuno. Questa semplice risposta è stata difficile da trovare per me.

 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 am on September 19. 

riferimento: Formattazione di date e orari utilizzando XSLT 2.0 e XPath