我在XML文件中的字段中有一个日期值:
<xsl:value-of select="nightlyRate/@date" />
我想将其转换为给定格式:
<xsl:param name="dateformat" select="yyyy/mm/dd">
如何在XSL转换中做到这一点?
答案 0 :(得分:0)
除非您有一些聪明的方法知道1920年3月4日是3月4日还是4月3日,否则问题就不可能解决。
在开始使用XSLT或任何其他语言编写代码之前,您需要明确说明代码应该做什么。
答案 1 :(得分:0)
在 XSLT 1.0 中,没有功能(如 @ michael.hor257k 所述)以特定格式转换日期。
您可以根据自己的环境通过以下两种方式专门实现它:
1。。如果您使用的是Java,则可以使用 java.util.TimeZone 和 java.util.Calendar API编写Util类。
在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>
在 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>