Formatowanie i wyświetlanie datetime w XSLT


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

Muszę dostać się do XSLT tylko w poniższym formacie:
01/11/2011 - 30/11/2011

Kiedy to robię:
<xsl:value-of select="A/StartDate/"> - <xsl:value-of select="A/EndDate/">

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

Jak mogę to poprawnie wyświetlić?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Przyjrzyj się funkcjom ciągów XPath:
substring
,
substring-before
itd.
Połączyć:

http://www.w3.org/TR/xpath/%23 ... tions
http://www.w3.org/TR/xpath/%23 ... tions
<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)
)"/>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Edytuj: Jeśli nadal musisz używać XSLT

1.x

możesz spojrzeć na

funkcja niestandardowa
http://www.exslt.org/date/functions/format-date/
Data EXSLT: Data formatu. W tym przypadku wzorzec dd/mm/rrr .
Jeśli używasz XSLT

2.0

Jest to wygodne użycie funkcji
Format-DateTime
.
Oto twój przykład w XSLT 2.0:
<pre class="lang-xml prettyprint-override">
<xsl:value-of select="format-dateTime(A/StartDate, '[D01]/[M01]/[Y0001]')"/> 
- <xsl:value-of select="format-dateTime(A/EndDate, '[D01]/[M01]/[Y0001]')"/>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Oprócz odpowiedzi @ Kirill Polishchuk, jeśli korzystałeś z XSLT 2.0, możesz po prostu dokonać wymiany:
substring(replace($input, "(\d{4})-(\d{2})-(\d{2})", "$3/$2/$1"), 0, 11)

Gdzie
$ input
to zawartość Twoich węzłów dat.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się