在XSL中转换日期格式

时间:2014-01-10 15:27:36

标签: xml date xslt xslt-1.0

我有一个问题,我不确定如何解决。我需要将以下XML中的DateOfBirth节点的日期格式从DD-MMM-YYYY转换为YYYY-MM-DD。我知道XSL中的format-date函数,但是我不确定它在翻译格式为文本MMM格式而不是数字MM格式的月份时是如何工作的。

任何建议都非常感谢。

<PersonalInformation>
  <Talisma_StudentID>987654</Talisma_StudentID>
  <SITS_StudentCode>201561230</SITS_StudentCode>
  <Title>MR</Title>
  <ForeName1>Charles</ForeName1>
  <ForeName2>XML</ForeName2>
  <ForeName3>TEST</ForeName3>
  <Surname>Dickens</Surname>
  <KnownAs>Charlie</KnownAs>
  <DateOfBirth>01-OCT-1950</DateOfBirth>
  <Sex>M</Sex>
</PersonalInformation>

1 个答案:

答案 0 :(得分:4)

这应该可以胜任。

格式: DD-MMM-YYYY成为YYYY-MM-DD
示例: 1987年8月27日成为1987-08-27

使用此XSL v1.0:

  

<xsl:template match="/">
  <html lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>Date Conversion</title>
    </head>
    <body>
      <xsl:call-template name="date">
        <xsl:with-param name="dd-mmm-yyyy" select="$XMLDOC/PersonalInformation/DateOfBirth"/>
      </xsl:call-template>
    </body>
  </html>
</xsl:template>

<xsl:template name="date">
  <xsl:param name="dd-mmm-yyyy"/>

  <xsl:variable name="dd" select="substring-before($dd-mmm-yyyy, '-')"/>
  <xsl:variable name="mmm-yyyy" select="substring-after($dd-mmm-yyyy, '-')"/>
  <xsl:variable name="mmm" select="substring-before($mmm-yyyy, '-')"/>
  <xsl:variable name="yyyy" select="substring-after($mmm-yyyy, '-')"/>

  <xsl:value-of select="$yyyy"/>
  <xsl:text>-</xsl:text>

  <xsl:choose>
    <xsl:when test="$mmm = 'JAN'">01</xsl:when>
    <xsl:when test="$mmm = 'FEB'">02</xsl:when>
    <xsl:when test="$mmm = 'MAR'">03</xsl:when>
    <xsl:when test="$mmm = 'APR'">04</xsl:when>
    <xsl:when test="$mmm = 'MAY'">05</xsl:when>
    <xsl:when test="$mmm = 'JUN'">06</xsl:when>
    <xsl:when test="$mmm = 'JUL'">07</xsl:when>
    <xsl:when test="$mmm = 'AUG'">08</xsl:when>
    <xsl:when test="$mmm = 'SEP'">09</xsl:when>
    <xsl:when test="$mmm = 'OCT'">10</xsl:when>
    <xsl:when test="$mmm = 'NOV'">11</xsl:when>
    <xsl:when test="$mmm = 'DEC'">12</xsl:when>
  </xsl:choose>

  <xsl:text>-</xsl:text>
  <xsl:value-of select="$dd"/>
</xsl:template>

应用于此XML:

<PersonalInformation>
  <Talisma_StudentID>987654</Talisma_StudentID>
  <SITS_StudentCode>201561230</SITS_StudentCode>
  <Title>MR</Title>
  <ForeName1>Charles</ForeName1>
  <ForeName2>XML</ForeName2>
  <ForeName3>TEST</ForeName3>
  <Surname>Dickens</Surname>
  <KnownAs>Charlie</KnownAs>
  <DateOfBirth>01-OCT-1950</DateOfBirth>
  <Sex>M</Sex>
</PersonalInformation>

产生这样的结果:
1950年10月1日