Пользовательское форматирование даты XSLT - GSA
Я пытаюсь отформатировать XSLT в динамической навигации, чтобы отобразить даты в определенном формате. Мой код выдает следующую ошибку:
"An unknown error occurred."
Код XSLT:
<xsl:template name="CustomDate-DN">
<xsl:param name="d"/>
<xsl:value-of select="format-date($d, '[D01] [MN,*-3] [Y0001]', 'en', (), ())"/>
</xsl:template>
<xsl:template match="PV" mode="display_value">
<xsl:param name="js_escape"/>
<xsl:choose>
<!-- Customizations - Fancy Date -->
<xsl:when test="../@T = 4">
<xsl:call-template name="CustomDate-DN">
<xsl:with-param name="d" select="@V"/>
</xsl:call-template>
</xsl:when>
<!-- End of Customization -->
...
Если я заменю
<xsl:value-of select="format-date($d, '[D01] [MN,*-3] [Y0001]', 'en', (), ())"/>
С
<xsl:value-of select="$d"></xsl:value-of>
Кажется, что это работает, но дата находится в неправильном формате.
Я был бы признателен за некоторую помощь. Спасибо.UPDATE : моя дата в настоящее время выглядит как dd/mm/yyyy
. Я использую xslt 2.0. Я думаю, что проблема в том, что я передаю строку в формат-функция даты. Для этой функции требуется дата. Я не знаю, как преобразовать строку dd/mm/yyyy
в дату.
1 ответ:
Строка, представляющая дату в формате
dd/mm/yyyy
, не являетсядопустимойxs:date
и не может быть использована вformat-date()
.Но вы можете разобрать строку и преобразовать ее в ISO 8601 дату, которая является допустимым типом xs:date. Один из способов добиться этого в XSLT 2.0 - использовать
<xsl:analyze-string>
для извлечения частей года, месяца и дня с регулярным выражением. Затем вы можете перестроить дату в формате ISO 8601 и сохранить результат в новой переменной, которую вы можете переход кformat-date()
:<xsl:template name="CustomDate-DN"> <xsl:param name="d"/> <xsl:variable name="iso-date"> <xsl:analyze-string select="$d" regex="(\d{{1,2}})/(\d{{1,2}})/(\d{{4}})"> <xsl:matching-substring> <xsl:value-of select="regex-group(3)"/> <xsl:text>-</xsl:text> <xsl:value-of select="regex-group(2)"/> <xsl:text>-</xsl:text> <xsl:value-of select="regex-group(1)"/> </xsl:matching-substring> </xsl:analyze-string> </xsl:variable> <xsl:value-of select="format-date($iso-date, '[D01] [MN,*-3] [Y0001]', 'en', (), ())"/> </xsl:template>