В XSLT 1.0 нет функции (как сказал @michael.hor257k), которая преобразует дату в определенный формат.
Вы можете добиться этого, в частности, двумя способами в зависимости от среды:
1. Если вы используете Java, вы можете писать классы Util, используя java.util.TimeZone & java.util.Calendar API.
Определите конечные статические константы в классе util и проанализируйте значение в требуемом формате даты с помощью этих API.
2. При условии, что у вас есть источник входного сигнала, как показано ниже:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<nightlyRate date="20180312" />
</Root>
Тогда xslt для преобразования будет использовать простую substring()
функцию:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<date>
<xsl:call-template name="getFormattedDate">
<xsl:with-param name="date" select="Root/nightlyRate/@date" />
</xsl:call-template>
</date>
</xsl:template>
<xsl:template name="getFormattedDate">
<xsl:param name="date" />
<xsl:value-of select="concat(substring($date,1,4),'/',substring($date,5,2),'/',substring($date,7,2))" />
</xsl:template>
In XSLT 2.0 ,
Используя тот же источник ввода, его можно записать следующим образом:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
version="2.0">
<xsl:output omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:variable name="dateString">
<xsl:value-of select="substring(Root/nightlyRate/@date,1,4)" />
<xsl:text>-</xsl:text>
<xsl:value-of select="substring(Root/nightlyRate/@date,5,2)" />
<xsl:text>-</xsl:text>
<xsl:value-of select="substring(Root/nightlyRate/@date,7,2)" />
</xsl:variable>
<RequiredFormat>
<xsl:value-of select="format-date(xs:date($dateString), '[Y]/[M]/[D]')" />
</RequiredFormat>
<OtherFormat>
<xsl:value-of select="format-date(xs:date($dateString), '[MNn] [D], [Y]')" />
</OtherFormat>
</xsl:template>
И вывод будет:
<RequiredFormat>2018/3/12</RequiredFormat>
<OtherFormat>March 12, 2018</OtherFormat>