2016-12-14 101 views
1

我收到日期从XML作为XSLT下面一个大十进制格式迄今:是否有可能在XSLT

<DATE>20161211000000</DATE> 

我想这是11格式化为有效的日期格式月2016

那么是否有可能在xslt中格式化日期?

请帮忙。

+0

你可以使用XSLT2.0? –

+0

我正在使用XSLT1.0 –

回答

1

在XSLT 1.0,你可以这样做:

<xsl:template match="DATE"> 
    <xsl:copy> 
     <xsl:value-of select="substring(., 7, 2)" /> 
     <xsl:text> </xsl:text> 
     <xsl:variable name="month" select="substring(., 5, 2)" /> 
     <xsl:value-of select="substring('JanFebMarAprMayJunJulAugSepOctNovDec', 3 * ($month - 1) + 1, 3)"/> 
     <xsl:text> </xsl:text> 
     <xsl:value-of select="substring(., 1, 4)" /> 
    </xsl:copy> 
</xsl:template> 
+0

感谢您的回复,我尝试了您的代码,它的工作。你可以告诉我,如果我需要改变2016年12月11日这样的格式。我该怎么办? –

+0

我认为代码足够清晰,可以让您自行进行调整。 –

+0

感谢您的回复,我试过了,它的未来很好。但需要问一件事,是否可以将此模板添加到两个不同的节点。我的意思是我不想再次为两个diff节点复制相同的逻辑n。这将是一个很大的帮助。 –

2

你没有一个大的小数而是与代表的格式的日期一些价值在XSLT不支持,所以你需要将其转换成XSLT 2.0 xs:date值,然后你可以format-date格式化元素(https://www.w3.org/TR/xslt20/#date-time-examples):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> 

    <xsl:template match="DATE"> 
     <xsl:copy> 
      <xsl:value-of 
       select=" 
        format-date(xs:date(
        concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2))), '[D01] [MN,*-3] [Y0001]')" 
      /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet>