2017-07-12 160 views
0

我有這種格式的XML文件中的字段的日期值:如何日期時間轉換爲ISO 8601格式

<date>2017-05-01 00:00:00</date> 

我想將其轉換成標準的XSD格式:

2017-05-01T00:00:00.000Z 

我目前使用3.0版本。

我的樣式表

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
version="3.0"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:variable name="theDate" select="/item/date" /> 

<xsl:template match="/" name="xsl:initial-template"> 
    <Bundle> 
     <thedate> 
      <xsl:attribute name="value"><xsl:value-of select="$theDate"/></xsl:attribute> 
     </thedate> 
    </Bundle> 
</xsl:template> 

XML輸入

<?xml version="1.0" encoding="UTF-8"?> 
<item> 
    <date>2017-05-01 00:00:00</date> 
</item> 

想輸出看起來像這樣

<?xml version="1.0" encoding="UTF-8"?> 
<Bundle xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <thedate value="2017-05-01T00:00:00.000Z"/> 
</Bundle> 
+0

你擁有的是*字符串*,而不是日期或日期時間。只需將空間轉換爲「T」並添加一個「Z」即可完成。 –

+0

謝謝邁克爾。翻譯做了魔術。 。000Z – user1998820

回答

0
<xsl:value-of select="translate($theDate,' ', 'T')"/>+000Z 
+0

您的結果不是有效的ISO 8601日期時間。您需要添加'Z'或'+00:00' - 而不是'+ 000Z'。 –

+0

這就是你如何得到結果,而不是它可以硬編碼的實際值 – user1998820

相關問題