【问题标题】:Formatting DateTime in xslt 1.0在 xslt 1.0 中格式化 DateTime
【发布时间】:2012-04-23 05:52:49
【问题描述】:

我正在尝试在 XSL 1.0 中格式化我的 DateTime 2005-08-01T12:00:00。我尝试使用子字符串函数,但 'T' 仍然存在。 我希望我的输出是这样的 -

<YEAR>2005</YEAR>
<MONTH>08</MONTH>
<DAY>01</DAY>
<HOUR>12<HOUR/>
<MINUTE>00<MINUTE/>
<SECOND>00<SECOND/>

如何写这个的sn-p并从传入的值中删除'T'?

【问题讨论】:

  • 你的 xslt 是什么样子的?
  • 我觉得你很幸运能得到这个问题的答案。就个人而言,除非我能看到你的错误,否则我从不回答问题:我不想为人们编写代码,我想向他们展示他们哪里出错了,以便他们从练习中学到一些东西。

标签: xml xslt xslt-1.0


【解决方案1】:

您可以为此使用 substring 函数。请记住,字符串中每个字符的索引从 1 而不是 0 开始。因此,要获取年份,您将执行此操作(假设您当前位于日期元素上)

<YEAR><xsl:value-of select="substring(., 1, 4) " /></YEAR>

这是完整的 XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes" />

   <xsl:template match="date">
      <date>
         <YEAR><xsl:value-of select="substring(., 1, 4) " /></YEAR>
         <MONTH><xsl:value-of select="substring(., 6, 2) " /></MONTH>
         <DAY><xsl:value-of select="substring(., 9, 2) " /></DAY>
         <HOUR><xsl:value-of select="substring(., 12, 2) " /></HOUR>
         <MINUTE><xsl:value-of select="substring(., 15, 2) " /></MINUTE>
         <SECOND><xsl:value-of select="substring(., 18, 2) " /></SECOND>
      </date>
   </xsl:template>

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

应用于以下 XML 时

<dates>
   <date>2005-08-01T12:00:00</date>
</dates>

以下是输出

<dates>
   <date>
      <YEAR>2005</YEAR>
      <MONTH>08</MONTH>
      <DAY>01</DAY>
      <HOUR>12</HOUR>
      <MINUTE>00</MINUTE>
      <SECOND>00</SECOND>
   </date>
</dates>

显然,您必须确保日期始终采用相同的格式才能正常工作。

【讨论】:

  • 我很高兴能提供帮助。请注意,如果答案对您有用,您应该“接受”这些答案,以便将来可能查看您问题的其他人知道正确答案是什么。
猜你喜欢
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
相关资源
最近更新 更多