使用XSLT将日期格式从yyyy-mm-dd转换为dd-mm-yy

时间:2014-03-22 05:31:12

标签: xslt-1.0

我正在阅读一个XML文档,其中有一个日期标记,如下所示。

<uabDate>2014-07-23</uabDate>

现在我正在从XSL读取这个XML并尝试解析它,但我想将该日期值转换为23-07-14这样的格式。

我试过的内容如下。

这里我调用的模板将uabDate存储在变量businessDate中,然后调用模板

<xsl:call-template name="convertDateToDDMMYYYY_template">
  <xsl:with-param name="b1" 
                  select="$s2Date/uabDate"/>
</xsl:call-template>

以下是命名模板的定义:

<xsl:template name="convertDateToDDMMYYYY_template">
  <xsl:param name="b1"/>
  <xsl:variable name="DateVar">
    <xsl:value-of select="concat(
      substring(./b1,1,4),
      '-',
      substring(./b1,6,2),
      '-',
      substring(./b1,9,2))"/>
  </xsl:variable>

</xsl:template>

1 个答案:

答案 0 :(得分:0)

您错误地写了模板。首先,您将结果放入一个名为DateVar的变量中,并且不要输出它。

其次,您有一个名为b1的参数,应使用$b1调用参数。

第三个问题是您正在格式化与输入相同的日期。而不是改变日期格式。

例如,如果我使用此输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <uabDate>2014-07-23</uabDate>
</data>

这个XSLT:

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

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

    <xsl:template match="uabDate">
        <xsl:copy>
            <xsl:call-template name="convertDateToDDMMYYYY_template">
                <xsl:with-param name="b1" select="."/>
            </xsl:call-template>    
        </xsl:copy>
    </xsl:template>

    <xsl:template name="convertDateToDDMMYYYY_template">
        <xsl:param name="b1"/>
        <xsl:value-of select="concat(substring($b1,9,2),'-',substring($b1,6,2),'-',substring($b1,1,4))"/>
    </xsl:template>
</xsl:stylesheet>

它会创建此输出:

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <uabDate>23-07-2014</uabDate>
</data>