2011-10-18 19 views
9

Ho un XML con i dati datetime:formato e visualizzazione datetime in XSLT

<A> 
    <StartDate>2011-11-01T00:00:00</StartDate> 
    <EndDate>2011-11-30T00:00:00</EndDate> 
    <IsRecurring>false</IsRecurring> 
</A> 

ho bisogno di entrare in XSLT solo le date nel seguente formato:

01/11/2011 - 30/11/2011 

Quando faccio:

<xsl:value-of select="A/StartDate/"> - <xsl:value-of select="A/EndDate/"> 

ottengo questo:

2011-11-01T00:00:00 - 2011-11-30T00:00:00 

Come posso visualizzarlo correttamente?

risposta

17

Guarda XPath funzioni stringa: substring, substring-before ed ecc

Riferimento: http://www.w3.org/TR/xpath/#section-String-Functions

<xsl:variable name="dt" select="'2011-11-01T12:13:59'"/> 

     <xsl:value-of select="concat(
         substring($dt, 9, 2), 
         '/', 
         substring($dt, 6, 2), 
         '/', 
         substring($dt, 1, 4) 
        )"/> 
0

Oltre a @Kirill Polishchuk risposta se si stesse utilizzando XSLT 2.0 si può semplicemente fare una sostituzione:

substring(replace($input, "(\d{4})-(\d{2})-(\d{2})", "$3/$2/$1"), 0, 11) 

Dove $input è il contenuto dei nodi che contengono le date.

+0

Forse '$ 3/$ 2/$ 1'? –

+0

@KirillPolishchuk Sì. :) – FailedDev

9

MODIFICA: Se è ancora necessario utilizzare XSLT 1.x, è possibile visualizzare EXSLT's date:format-date user function. In tal caso il pattern è dd/MM/yyyy.

Se si utilizza XSLT 2.0, è più comodo utilizzare la funzione format-dateTime.

Ecco il vostro esempio in XSLT 2.0:

<xsl:value-of select="format-dateTime(A/StartDate, '[D01]/[M01]/[Y0001]')" /> 
- <xsl:value-of select="format-dateTime(A/EndDate, '[D01]/[M01]/[Y0001]')" /> 
+0

Ricevo un'eccezione: "'format-dateTime()' è una funzione XSLT sconosciuta." Forse non uso XSLT2.0? Come posso controllarlo? Come posso cambiarlo? – Naor

+1

@ Non hai appena fatto. Usa la risposta di Kirill Polishchuk. – FailedDev