2011-10-18 21 views
9

que tiene un XML con los datos de fecha y hora:formato y visualización de fecha y hora en XSLT

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

Necesito conseguir en XSLT sólo las fechas en el siguiente formato:

01/11/2011 - 30/11/2011 

Cuando hago:

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

me sale esto:

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

¿Cómo puedo visualizarlo correctamente?

Respuesta

17

Mira XPath funciones de cadena: substring, etc. substring-before y

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

Además de respuesta @Kirill Polishchuk si estuviera usando XSLT 2.0 se puede hacer simplemente una Reemplazar:

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

Dónde $input es el contenido de sus nodos que contienen las fechas.

+0

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

+0

@KirillPolishchuk Sí. :) – FailedDev

9

EDITAR: Si aún tiene que usar XSLT 1.x, puede consultar EXSLT's date:format-date user function. En ese caso, el patrón es dd/MM/yyyy.

Si está utilizando XSLT 2.0, es más práctico utilizar la función format-dateTime.

Aquí está su ejemplo en 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

Recibo una excepción: "'format-dateTime()' es una función XSLT desconocida." ¿Tal vez no uso XSLT2.0? ¿Cómo puedo verificarlo? ¿Cómo puedo cambiarlo? – Naor

+1

@Naor que acaba de hacer. Solo usa la respuesta de Kirill Polishchuk. – FailedDev