源XML中的不同日期格式
我正在使用XSLT2.0将日期从MM/dd/yyyy转换为yyyy-MM-dd。在我意识到我的源代码删除了所有前导零之前,这似乎足够简单。所以有时候我的输入是源XML中的不同日期格式,xml,datetime,xslt,xslt-2.0,Xml,Datetime,Xslt,Xslt 2.0,我正在使用XSLT2.0将日期从MM/dd/yyyy转换为yyyy-MM-dd。在我意识到我的源代码删除了所有前导零之前,这似乎足够简单。所以有时候我的输入是 <col11>11/14/2014</col11> 11/14/2014 但有时看起来是这样的 <col11>1/5/2015</col15> 1/5/2015 所以我用这个来格式化它 <outputcolumn> <xsl:variable name=
<col11>11/14/2014</col11>
11/14/2014
但有时看起来是这样的
<col11>1/5/2015</col15>
1/5/2015
所以我用这个来格式化它
<outputcolumn>
<xsl:variable name="date1" select="col11"/>
<xsl:variable name="formatted_date1" select="concat(substring($date1,7,4),'-',substring($date1,1,2),'-',substring($date1,4,2))"/>
<xsl:value-of select="$formatted_date1"/>
</outputcolumn>
这对第一个输入非常有效,但对第二个输入不起作用,因为第二个输入会删除前导零
如果删除了前导零导致不同的格式,您如何格式化日期?您可以tokenize()
和format-number()
<xsl:template match="col11">
<xsl:variable name="tokens" select="tokenize(normalize-space(),'/')"/>
<outputcolumn>
<xsl:value-of
select="($tokens[3],
format-number(number($tokens[1]),'00'),
format-number(number($tokens[2]),'00'))"
separator="-"/>
</outputcolumn>
</xsl:template>
除了@Daniel Haley的解决方案之外[他的功劳]: 为schematype“xs:date()”创建有效日期[格式:YYYY-MM-dd]:
<xsl:variable name="dateparts" select="tokenize(normalize-space(),'/')"/>
<xsl:variable name="validdate" select="concat($dateparts[3], '-', format-number(number($dateparts[1]), '00'), '-', format-number(number($dateparts[2]), '00'))"/>
Hint名称空间前缀
xs
必须定义为xmlns:xs=”http://www.w3.org/2001/XMLSchema“
您的日期已经是YYYY-MM-DD格式,因此使用format-date()
对其进行格式化将不会产生任何效果。对于YYYY-MM-DD,这是正确的。对于每一种其他可能的输出格式,这是一种可行的方法。对于每一种其他可能的输出格式,您可以以正确的格式开始组装令牌,而无需经过YYYY-MM-DD。
<xsl:value-of select="format-date(xs:date($validdate), '[Y0001]-[M01]-[D01]')"/>