XSLT 日期格式翻译从例如:Aug 23 2018 到 23/08/2018
XSLT date format translation from eg: Aug 23 2018 to 23/08/2018
如何使用 XSLT 将日期格式从 Aug 23 2018
转换为 23/08/2018
?
XSLT 1.0 没有任何 date
函数,您需要使用 string
操作函数将一种格式转换为另一种格式并翻译 Aug
到 08
使用一些处理逻辑。
XSLT 2.0 确实有 format-date()
函数,但是此函数期望的输入格式是 YYYY-MM-DD
,然后可以将其转换为这些 examples.
您可以使用以下选项来转换日期格式
输入XML
<inputDate>Aug 23 2018</inputDate>
XSLT 1.0
<xsl:template match="inputDate">
<xsl:variable name="day" select="substring(., 5, 2)" />
<xsl:variable name="mth" select="substring(., 1, 3)" />
<xsl:variable name="year" select="substring(., 8, 4)" />
<!-- Convert 3 char month name to digit -->
<xsl:variable name="month" select="string-length(substring-before('JanFebMarAprMayJunJulAugSepOctNovDec', $mth)) div 3 + 1" />
<!-- Format the number to 2 digits -->
<xsl:variable name="mthNum" select="format-number($month, '00')" />
<formattedDate>
<xsl:value-of select="concat($day,'/',$mthNum,'/',$year)" />
</formattedDate>
</xsl:template>
XSLT 2.0
这里的解决方案使用了regex
来匹配输入的日期格式。您也可以使用不同的方法。
<xsl:template match="inputDate">
<!-- Define array of months -->
<xsl:variable name="months" select="('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')" />
<!-- Define regex to match input date format -->
<xsl:analyze-string regex="^(([A-Za-z]{{3}}) (\d\d) (\d\d\d\d))$" select=".">
<!-- Align the regex groups according to the output format -->
<xsl:matching-substring>
<formattedDate>
<xsl:value-of select="regex-group(3)" />
<xsl:text>/</xsl:text>
<xsl:value-of select="format-number(index-of($months, regex-group(2)), '00')" />
<xsl:text>/</xsl:text>
<xsl:value-of select="regex-group(4)" />
</formattedDate>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
这两个模板的输出
<formattedDate>23/08/2018</formattedDate>
如何使用 XSLT 将日期格式从 Aug 23 2018
转换为 23/08/2018
?
XSLT 1.0 没有任何 date
函数,您需要使用 string
操作函数将一种格式转换为另一种格式并翻译 Aug
到 08
使用一些处理逻辑。
XSLT 2.0 确实有 format-date()
函数,但是此函数期望的输入格式是 YYYY-MM-DD
,然后可以将其转换为这些 examples.
您可以使用以下选项来转换日期格式
输入XML
<inputDate>Aug 23 2018</inputDate>
XSLT 1.0
<xsl:template match="inputDate">
<xsl:variable name="day" select="substring(., 5, 2)" />
<xsl:variable name="mth" select="substring(., 1, 3)" />
<xsl:variable name="year" select="substring(., 8, 4)" />
<!-- Convert 3 char month name to digit -->
<xsl:variable name="month" select="string-length(substring-before('JanFebMarAprMayJunJulAugSepOctNovDec', $mth)) div 3 + 1" />
<!-- Format the number to 2 digits -->
<xsl:variable name="mthNum" select="format-number($month, '00')" />
<formattedDate>
<xsl:value-of select="concat($day,'/',$mthNum,'/',$year)" />
</formattedDate>
</xsl:template>
XSLT 2.0
这里的解决方案使用了regex
来匹配输入的日期格式。您也可以使用不同的方法。
<xsl:template match="inputDate">
<!-- Define array of months -->
<xsl:variable name="months" select="('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')" />
<!-- Define regex to match input date format -->
<xsl:analyze-string regex="^(([A-Za-z]{{3}}) (\d\d) (\d\d\d\d))$" select=".">
<!-- Align the regex groups according to the output format -->
<xsl:matching-substring>
<formattedDate>
<xsl:value-of select="regex-group(3)" />
<xsl:text>/</xsl:text>
<xsl:value-of select="format-number(index-of($months, regex-group(2)), '00')" />
<xsl:text>/</xsl:text>
<xsl:value-of select="regex-group(4)" />
</formattedDate>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
这两个模板的输出
<formattedDate>23/08/2018</formattedDate>