源XML中的不同日期格式

时间:2016-09-15 22:02:51

标签: xml datetime xslt xslt-2.0

我正在使用XSLT 2.0将日期从MM / dd / yyyy转换为yyyy-MM-dd。这看起来很简单,直到我意识到我的源码丢掉了所有前导零。所以我的输入是

<col11>11/14/2014</col11>

但有时它看起来像这样

<col11>1/5/2015</col15>

所以我用它来格式化它,

   <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>

这适用于第一个输入,但不是第二个输入前导零。

如何格式化排除前导零的日期,从而产生不同的格式?

2 个答案:

答案 0 :(得分:2)

您可以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>

答案 1 :(得分:0)

除了@Daniel Haley的解决方案[学分归于他]:

为schematype&#34; xs:date()&#34;创建一个有效的日期。 [格式: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'))"/>

功能 format-date w3#function-format-date

<xsl:value-of select="format-date(xs:date($validdate), '[Y0001]-[M01]-[D01]')"/>

提示名称空间前缀xs必须定义为xmlns:xs="http://www.w3.org/2001/XMLSchema"