4

我正在使用 XSLT 创建 XML 文件。日期时间有毫秒。我需要在没有毫秒的情况下输出 XML。

格式必须是YYYY-MM-DDTHH:MM:SS

例如:

XML 将日期显示为:2012-12-341T09:26:53.132-0500

但这需要是:2012-12-341T09:26:53

4

3 回答 3

2

如果所有值都是 dateTime 并且具有.,则可以使用substring-before()

substring-before('2012-12-341T09:26:53.132-0500', '.')

您可以substring()用来选择前 20 个字符:

substring('2012-12-341T09:26:53.132-0500', 0, 21)
于 2012-12-12T02:08:08.333 回答
1

如果您使用的是 XSLT2,请参阅此功能:http ://www.w3.org/TR/xslt20/#function-format-dateTime 。这个图片字符串应该给你你想要的:

format-dateTime($dateTime,'[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')
于 2012-12-11T21:44:13.863 回答
0

无论字符串是否包含点或连字符或点和连字符都包含,或者没有,此 XPath 表达式都会产生所需的结果,并且不依赖于 year、month、day 使用的位数

    substring-before(concat(substring-before(concat(substring-after(.,'T'),
                                                    '.'),
                                             '.'),
                           '-'),
                     '-')

这是一个使用此 XPath 表达式的简单 XSLT 转换

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="dt/text()">
   <xsl:value-of select="substring-before(., 'T')"/>
   <xsl:text>T</xsl:text>
   <xsl:value-of select=
   "substring-before(concat(substring-before(concat(substring-after(.,'T'),
                                                    '.'),
                                             '.'),
                           '-'),
                     '-')
   "/>
 </xsl:template>
</xsl:stylesheet>

当将此转换应用于此测试 XML 文档时:

<t>
 <dt>2012-12-341T09:26:53.132-0500</dt>
 <dt>2012-12-355T09:34:56</dt>
 <dt>2012-12-355T09:34:56-0500</dt>
 <dt>2012-12-13T9:34:5-0500</dt>
 <dt>2012-12-344T09:12:34.378-0500</dt>
</t>

产生了想要的正确结果:

<t>
   <dt>2012-12-341T09:26:53</dt>
   <dt>2012-12-355T09:34:56</dt>
   <dt>2012-12-355T09:34:56</dt>
   <dt>2012-12-13T9:34:5</dt>
   <dt>2012-12-344T09:12:34</dt>
</t>

说明

正确应用哨兵

于 2012-12-12T04:04:06.653 回答