Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
源XML中的不同日期格式_Xml_Datetime_Xslt_Xslt 2.0 - Fatal编程技术网

源XML中的不同日期格式

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

我正在使用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="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]')"/>