2015-05-25 80 views
0

我想轉換此XSLT DateTime格式轉換爲YYYY-DD-MMTHH:MI:SS

5/21/15 13:47YYYY-DD-MMTHH:MI:SS

源格式是d(or)dd/m(or)mm/yy hh:mm

我怎樣才能做到這一點?

+0

請選擇要麼XSLT 1.0或2.0,而不是在兩者之間。 –

+0

嗨邁克爾。編輯該問題僅添加xslt 2.0 – Tigga

+0

您可以使用'xsl:analyze-string'來提取組件,然後您可以構建'xs:dateTime'值。但是,您需要先決定如何將兩位數年份值轉換爲四位數值。 –

回答

0

事情是這樣的:

<xsl:analyze-string select="$in" 
        regex="(\d+)/(\d+)/(\d+) (\d+):(\d+)"> 
    <xsl:matching-substring> 
    <xsl:value-of select="'20', 
    format-number(number(regex-group(3)), '00'), 
    '-', 
    format-number(number(regex-group(1)), '00'), 
    '-', 
    format-number(number(regex-group(2)), '00'), 
    'T', 
    format-number(number(regex-group(4)), '00'), 
    ':', 
    format-number(number(regex-group(5)), '00'), 
    ':00'" 
    separator=""/> 
    </xsl:matching-substring> 
</xsl:analyze-string> 
+0

這似乎有幾個錯誤:http://xsltransform.net/pPqsHTU –

+0

我確實說過「類似」...我已經刪除了一些更明顯的錯誤(但仍未測試)。 –

0

給出的例子輸入:

XML

<given-date>5/21/15 13:47</given-date> 

你可以使用:

XSLT 2.0

<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:strip-space elements="*"/> 

<xsl:template match="given-date"> 
    <result> 
      <xsl:variable name="dte" select="tokenize(.,'/|\s')" /> 
      <xsl:value-of select="concat('20', $dte[3], format-number(number($dte[1]), '-00'), format-number(number($dte[2]), '-00'), 'T', $dte[4], ':00')" /> 
    </result> 
</xsl:template> 

</xsl:stylesheet> 

返回:

<?xml version="1.0" encoding="UTF-8"?> 
<result>2015-05-21T13:47:00</result> 

注意,這裏假設你所有的日期是在2000年和2099年