输入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>
任何领导都会非常有帮助。
答案 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>