xslt转换日期,分隔节点

时间:2017-07-25 11:30:11

标签: xml date xslt formatting

我在level3中的xml

<IncorporationDate>
  <CCYY>2016</CCYY>
  <MM>04</MM>
  <DD>21</DD>
</IncorporationDate>

现在我需要将其显示为2016年4月21日

所以我尝试连接这个并使用format-date但是在尝试格式化字符串时会出错。

<xsl:variable name="incorpDate">
      <xsl:value-of select="concat(//a:Identification/b:IncorporationDate/c:DD,'/',//a:Identification/b:IncorporationDate/c:MM,'/',//a:Identification/b:IncorporationDate/c:CCYY)"/>
</xsl:variable>

然后

 <xsl:value-of select="format-date($incorpDate, '[D] [MNn] [Y0001]')" />

我在整个节点上尝试格式化日期

 <xsl:value-of select="format-date(//a:Identification/b:IncorporationDate, '[D] [MNn] [Y0001]')" />

我知道这可能很简单,但xml / xslt并不是我所知道的,我知道这需要改变很多样式表。

2 个答案:

答案 0 :(得分:3)

创建xs:date,然后格式化:

<xsl:template match="IncorporationDate">
    <xsl:value-of select="format-date(xs:date(concat(CCYY, '-', MM, '-', DD)), '[D] [MNn] [Y0001]')"/>
</xsl:template>

完整样本

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

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

    <xsl:template match="IncorporationDate">
        <xsl:value-of select="format-date(xs:date(concat(CCYY, '-', MM, '-', DD)), '[D] [MNn] [Y0001]')"/>
    </xsl:template>

</xsl:transform>

http://xsltransform.net/naZXpXm/1

答案 1 :(得分:0)

我知道我做错了什么。

在concat上我应该制作一个YYYY-MM-DD格式,这样格式化日期功能就可以了。

我改变了它,它正在发挥作用。