【问题标题】:Format date in xslt在 xslt 中格式化日期
【发布时间】:2013-07-05 12:05:05
【问题描述】:

我有以下 xml

  <Report>
     <Items>
       <Item>
        <Id>1</Id>
        <TotalSent>251</TotalSent>
        <Opened>48</Opened>
        <LastSend>01/07/2013 16:38:18</LastSend>
        <Bounced>1</Bounced>
        <Unopened>202</Unopened>
      </Item>
    </Items>
  </Report>

我想使用 xslt 将其转换为另一个 xml,我想要的 o/p 如下所示

<chart subcaption ="Last sent on Monday 01 July 2013 at 16:38">
  <set label="Opened" value="48"/>
  <set label="Bounced" value="1"/>
</chart>

我无法为 subcaption 属性获取我想要的日期。 我尝试了下面的 xslt 代码,但它不起作用

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="/">
    <chart>
      <xsl:variable name='lastSend' select='Report/Items/Item/LastSend' />
      <xsl:attribute name="subcaption">
        <xsl:value-of select="ms:format-date($lastSend, ' Last sent on MMM dd, yyyy at')"/>
        <xsl:value-of select="ms:format-time($lastSend, ' hh:mm')"/>
      </xsl:attribute>
      <xsl:for-each select="Report/Items/Item">
        <set>
          <xsl:attribute name="label">Opened</xsl:attribute>
          <xsl:attribute name="value">
            <xsl:value-of select="Opened" />
          </xsl:attribute>
        </set>
        <set>
          <xsl:attribute name="label">Bounced</xsl:attribute>
          <xsl:attribute name="value">
            <xsl:value-of select="Bounced" />
          </xsl:attribute>
        </set>
      </xsl:for-each>
    </chart>
  </xsl:template>
</xsl:stylesheet>

当我在 ms:format-date() 和 ms:format-time() 函数中传递硬编码值时,例如 01/07/2013 16:38:18 它工作正常,但是当我传递变量时值 $lastSend 它不起作用。

注意:我可以使用任何版本的 xsl。

【问题讨论】:

    标签: xslt xslt-1.0 xslt-2.0


    【解决方案1】:

    如果您想使用 XSLT 2.0,那么您需要将自定义日期和 dateTime 格式分别转换为 xs:dateTime,然后您可以使用 XSLT 2.0 提供的 format-dateTime 函数(参见 http://www.w3.org/TR/xslt20/#format-date):

    <xsl:template match="LastSend">
      <!-- 01/07/2013 16:38:18 -->
      <xsl:variable name="dt" as="xs:dateTime" select="xs:dateTime(concat(substring(., 7, 4), '-', substring(., 4, 2), '-', substring(., 1, 2), 'T', substring(., 12)))"/>
      <xsl:attribute name="subcaption" select="format-dateTime($dt, 'Last sent on [F] [D01] [MNn] [Y0001] at [H01]:[m01]')"/>
    </xsl:template>
    

    以上面第二个参数“图片字符串”为例,说明如何格式化dateTime,您可能需要根据 XSLT 2.0 规范中记录的图片字符串参数来调整它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      相关资源
      最近更新 更多