2012-04-23 71 views
0

我想在XSL 1.0中格式化我的DateTime 2005-08-01T12:00:00。我尝试过使用子字符串函数,但'T'仍然来临。 我希望我的输出来这样的 -在xslt 1.0中格式化DateTime

<YEAR>2005</YEAR> 
<MONTH>08</MONTH> 
<DAY>01</DAY> 
<HOUR>12<HOUR/> 
<MINUTE>00<MINUTE/> 
<SECOND>00<SECOND/> 

如何写的这个片段和传入的值去掉“T”?

+1

你的xslt是什么样的? – 2012-04-23 05:55:34

+1

我认为你非常幸运能够得到这个问题的答案。就我个人而言,除非我能看到您的错误,否则我从不回答问题:我不想为人们编写代码,我想向他们展示他们出错的地方,以便他们从练习中学到一些东西。 – 2012-04-23 09:11:51

回答

3

您可以使用子串函数。请记住,该字符串中的每个字符的索引从1开始,不是0,所以,让你这样做了一年(假设您当前位于日期元素)

<YEAR><xsl:value-of select="substring(., 1, 4) " /></YEAR> 

下面是完整的XSLT

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

    <xsl:template match="date"> 
     <date> 
     <YEAR><xsl:value-of select="substring(., 1, 4) " /></YEAR> 
     <MONTH><xsl:value-of select="substring(., 6, 2) " /></MONTH> 
     <DAY><xsl:value-of select="substring(., 9, 2) " /></DAY> 
     <HOUR><xsl:value-of select="substring(., 12, 2) " /></HOUR> 
     <MINUTE><xsl:value-of select="substring(., 15, 2) " /></MINUTE> 
     <SECOND><xsl:value-of select="substring(., 18, 2) " /></SECOND> 
     </date> 
    </xsl:template> 

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

当施加到下面的XML

<dates> 
    <date>2005-08-01T12:00:00</date> 
</dates> 

以下是输出

<dates> 
    <date> 
     <YEAR>2005</YEAR> 
     <MONTH>08</MONTH> 
     <DAY>01</DAY> 
     <HOUR>12</HOUR> 
     <MINUTE>00</MINUTE> 
     <SECOND>00</SECOND> 
    </date> 
</dates> 

很明显,您必须确保日期总是以相同的格式进行操作。

+0

谢谢蒂姆......它工作完美。 – Kundan 2012-04-23 07:20:00

+2

我很高兴能有所帮助。请注意,如果他们为你工作,你应该'接受'答案,以便其他可能在将来查看你的问题的人知道正确答案是什么。 – 2012-04-23 07:47:31