2013-09-25 441 views
2

我得到的輸入xml的日期值如下。XSL日期格式問題

<date-data> 
    <name>selectedDate</name> 
    <value>2013-10-21 8:03</value> 
</date-data> 
<date-data> 
    <name>selectedDate</name> 
    <value>2013-10-24 9:03</value> 
</date-data> 

我想轉換的日期格式YYYY-MM-DD HH:MM,並期望日期字段的輸出作爲

2013-10-21 08:03 
2013-10-24 09:03 

我使用了xsl如下

<xsl:variable name="dt" as="xs:dateTime" select="value"/> 
<xsl:value-of select="{format-dateTime($dt, '[Y0001]-[M01]-[D01]T[H01]:[m01]')}" /> 

我收到此日期格式字符串的錯誤。任何幫助真的很感激。

回答

2

您需要提取日期格式的部分以構造xs:dateTime值,然後才能使用format-dateTime。以下是一個示例:

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

<xsl:output method="xml" indent="yes"/> 

<xsl:function name="mf:pad" as="xs:string"> 
    <xsl:param name="value" as="xs:string"/> 
    <xsl:param name="length" as="xs:integer"/> 
    <xsl:variable name="zeros" as="xs:string" select="'0000000000'"/> 
    <xsl:sequence select="concat(substring($zeros, 1, $length - string-length($value)), $value)"/> 
</xsl:function> 

<xsl:template match="date-data"> 
    <xsl:variable name="dt" as="xs:dateTime"> 
    <xsl:analyze-string select="value" regex="([0-9]{{4}})-([0-9]{{1,2}})-([0-9]{{1,2}}) ([0-9]{{1,2}}):([0-9]{{1,2}})"> 
     <xsl:matching-substring> 
     <xsl:sequence select="xs:dateTime(concat(regex-group(1), '-', 
               mf:pad(regex-group(2), 2), '-', 
               mf:pad(regex-group(3), 2), 'T', 
               mf:pad(regex-group(4), 2), ':', 
               mf:pad(regex-group(5), 2), 
               ':00'))"/> 
     </xsl:matching-substring> 
    </xsl:analyze-string> 
    </xsl:variable> 
    <xsl:value-of select="format-dateTime($dt, '[Y0001]-[M01]-[D01]T[H01]:[m01]')" /> 
</xsl:template> 

</xsl:stylesheet> 

您可能需要根據格式可能具有的變化來調整代碼。