Formatta una data in XML tramite XSLT

Quando uso il serializzatore XML per serializzare un DateTime , è scritto nel seguente formato:

 2007-11-14T12:01:00 

Quando si passa questo attraverso un foglio di stile XSLT per l’output HTML, come posso formattare questo? Nella maggior parte dei casi ho solo bisogno della data, e quando ho bisogno del tempo ovviamente non voglio che la “T divertente” sia lì.

Qui ci sono un paio di modelli 1.0 che è ansible utilizzare: –

             

Chiamali con: –

     

e

     

dove xpath è il percorso di un elemento o attributo che ha il formato di data e ora standard.

La formattazione della data non è facile in XSLT 1.0. Probabilmente il modo più elegante è scrivere una breve funzione di estensione XSLT in C # per la formattazione della data. Ecco un esempio:

             

Con questo documento di input

  2007-11-14T12:01:00 

otterrete

  14.11.2007 

La funzione di formattazione della data accetta un valore di data come stringa e un formato come descritto in DateTime.ToString Method . L’utilizzo della struttura DateTime di .NET consente di analizzare gratuitamente valori datetime XSD arbitrari (compresi gli specificatori del fuso orario), il calcolo del fuso orario e l’output localizzato.

Tuttavia, tieni presente che esiste un avvertimento (http://support.microsoft.com/kb/316775) con estensioni di script msxml: ogni volta che carichi XSLT, un assembly contenente il codice dello script viene generato dynamicmente e caricato in memoria. A causa della progettazione del runtime .NET, questo assembly non può essere scaricato. Ecco perché devi assicurarti che il tuo XSLT sia caricato una sola volta (e poi memorizzato nella cache per un ulteriore riutilizzo). Questo è particolarmente importante quando si esegue all’interno di IIS.

John Workman discute a lungo questo problema e offre diverse soluzioni in questa discussione [1] sul suo blog. Fondamentalmente, analizza i singoli componenti della data e ricombina nell’ordine che desideri. Per il tuo caso, una versione XSLT 1.0+ pura sarebbe:

                                    

Un altro formato (SOSTITUISCE la sezione FORMATO EUROPEO):

   January February March April May June July August September October November December             

Puoi ricombinare gli elementi in qualsiasi modo tu scelga.

[1] http://geekswithblogs.net/workdog/archive/2007/02/08/105858.aspx @@ http://archive.is/4Hjep

Mi scuso per aver commentato questo vecchio thread, ma per altri che lo trovano come me potresti anche usare javascript se stai usando un trasformatore MS:

Dichiara lo spazio dei nomi “msxsl”:

 xmlns:msxsl="urn:schemas-microsoft-com:xslt" 

Dichiara uno spazio dei nomi per il tuo script:

 xmlns:js="urn:custom-javascript" 

(Opzionale) Ometti i prefissi dall’output:

 exclude-result-prefixes="msxsl js" 

Quindi si finisce con una dichiarazione xsl come questa:

  

Scrivi il codice JavaScript nell’elemento msxsl: script:

    

Chiama la tua funzione JavaScript (usando la syntax XPath ‘.’ Che denota ‘questo nodo’):

  

NB: Al momento della scrittura non sembra esserci un modo (xsl) per includere file js esterni (ad esempio la libreria jquery). Questo potrebbe essere fatto analizzando il lato file server xsl prima della trasformazione e aggiungendo il contenuto del file js come una stringa in una sezione CDATA. Ho iniziato a seguire questa rotta da solo, ma ho concluso che se hai bisogno di questo livello di funzionalità potrebbe essere posizionato in una parte diversa della pipeline.

fonte: http://dev.ektron.com/kb_article.aspx?id=482
ref: http://www.ibm.com/developerworks/xml/library/x-tipxsltjs/index.html

correzione al post di roy: il giorno dalla funzione otterrà sempre il valore del mese. Utilizza il seguente:

           

Grazie, questo post ha aiutato molto.

Stavo trasformando un feed RSS che utilizza il seguente formato data: Lun, 04 Apr 2011 23:18:00 -0700 . Ecco il modello chiamato che ho usato per analizzarlo.