форматировать и отображать дату и время в xslt - PullRequest
13 голосов
/ 18 октября 2011

У меня есть XML с данными даты и времени:

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

Мне нужно получить в xslt только даты в следующем формате:

01/11/2011 - 30/11/2011

Когда я это сделаю:

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

Я получаю это:

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

Как правильно отобразить его?

Ответы [ 3 ]

18 голосов
/ 18 октября 2011

Посмотрите на строковые функции XPath: substring, substring-before и т. Д.

Ссылка: 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)
                      )"/>
13 голосов
/ 18 октября 2011

РЕДАКТИРОВАТЬ: Если вам все еще нужно использовать XSLT 1.x , вы можете посмотреть EXSLT date: пользовательская функция format-date .В этом случае шаблон будет dd/MM/yyyy.

. Если вы используете XSLT 2.0 , удобнее использовать функцию format-dateTime.

Вот ваш пример в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 голосов
/ 18 октября 2011

В дополнение к ответу @Kirill Polishchuk, если вы использовали XSLT 2.0, вы можете просто сделать замену:

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

Где $input - это содержимое ваших узлов, которые содержат даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...