【问题标题】:XSLT - format Date - remove millisecondsXSLT - 格式化日期 - 删除毫秒
【发布时间】:2012-12-11 21:29:59
【问题描述】:

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

格式需要YYYY-MM-DDTHH:MM:SS

例如:

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

但这必须是:2012-12-341T09:26:53

【问题讨论】:

标签: xslt


【解决方案1】:

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

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

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

substring('2012-12-341T09:26:53.132-0500', 0, 21)

【讨论】:

    【解决方案2】:

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

    format-dateTime($dateTime,'[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')
    

    【讨论】:

      【解决方案3】:

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

          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>
      

      解释

      正确应用sentinels

      【讨论】:

        猜你喜欢
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 2012-07-11
        相关资源
        最近更新 更多