如何使用XSLT创建两种日期格式

时间:2015-12-19 13:30:08

标签: xml date xslt

输入XML是:

<elems>
  <elem dataType="java.lang.String">N</elem>
  <elem dataType="java.lang.Date"/>2015-12-29</elem>
  <elem dataType="java.lang.String">
    <TEST>
      <TEST1>
        <TEST2>
          <ACT>CREATE</ACT>
          <START_DATE>2015-12-19</START_DATE>
          <END_DATE>2015-12-29</END_DATE>
        </TEST2>
        </TEST1>
    </TEST>
  </elem>
  <elem dataType="java.lang.String">
    <TEST>
      <TEST1>
        <TEST2>
          <ACT>CREATE</ACT>
          <START_DATE>2015-12-19</START_DATE>
          <END_DATE>2015-12-29</END_DATE>
        </TEST2>
      </TEST1>
    </TEST>
  </elem>
</elems>

我需要一个可以转换此XML的XSLT,并更改START_DATE&amp;的日期格式。 END_DATE不是XML中存在的任何其他日期。

预期输出:

<elems>
  <elem dataType="java.lang.String">N</elem>
  <elem dataType="java.lang.Date"/>2015-12-29</elem>
  <elem dataType="java.lang.String">
    <TEST>
      <TEST1>
        <TEST2>
          <ACT>CREATE</ACT>
          <START_DATE>19-DEC-2015</START_DATE>
          <END_DATE>29-DEC-2015</END_DATE>
        </TEST2>
        </TEST1>
    </TEST>
  </elem>
  <elem dataType="java.lang.String">
    <TEST>
      <TEST1>
        <TEST2>
          <ACT>CREATE</ACT>
          <START_DATE>19-DEC-2015</START_DATE>
          <END_DATE>29-DEC-2015</END_DATE>
        </TEST2>
      </TEST1>
    </TEST>
  </elem>
</elems>

任何领导都会非常有帮助。

1 个答案:

答案 0 :(得分:0)

以这种方式尝试:

XSLT 1.0

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

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

<xsl:template match="START_DATE/text() | END_DATE/text()">
    <xsl:call-template name="reformat-date">
        <xsl:with-param name="date" select="."/>
    </xsl:call-template>
</xsl:template>

<xsl:template name="reformat-date">
    <xsl:param name="date"/>
    <xsl:value-of select="substring-after(substring-after($date, '-'), '-')" />
    <xsl:text>-</xsl:text>
    <xsl:variable name="m" select="substring-before(substring-after($date, '-'), '-')" />
    <xsl:value-of select="substring('JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC', 3 * ($m - 1) + 1, 3)"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="substring($date, 1, 4)" />
</xsl:template>

</xsl:stylesheet>