2011-10-18 20 views
9

Mam XML z danych datetime:format i wyświetlacz datetime w XSLT

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

Muszę dostać w XSLT tylko daty w następującym formacie:

01/11/2011 - 30/11/2011 

Kiedy zrobić:

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

uzyskać to:

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

Jak mogę wyświetlić to poprawnie?

Odpowiedz

17

Spójrz na funkcji XPath wyrażenie: substring, substring-before itp

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

Oprócz @Kirill Poliszczuk odpowiedź, jeśli były przy użyciu XSLT 2.0 można po prostu zrobić wymienić:

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

Gdzie $input jest zawartością węzłów, które zawierają daty.

+0

Może '3 $/$ 2/$ 1 '? –

+0

@KirillPolishchuk Tak. :) – FailedDev

9

EDIT: Jeśli nadal trzeba używać XSLT 1.x, można spojrzeć na EXSLT's date:format-date user function. W takim przypadku wzór to dd/MM/yyyy.

Jeśli używasz XSLT 2.0, lepiej jest użyć funkcji format-dateTime.

Tu masz przykład w 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

Otrzymuję wyjątek: "'format-dateTime()' jest nieznaną funkcją XSLT." Może nie używam XSLT2.0? Jak mogę to sprawdzić? Jak mogę to zmienić? – Naor

+1

@No po prostu to zrobiłeś. Po prostu użyj odpowiedzi Kirill Polishchuk. – FailedDev