2016-09-15 104 views
1

我正在使用XSLT 2.0將日期從MM/dd/yyyy轉換爲yyyy-MM-dd。這似乎很簡單,直到我意識到我的源碼丟棄了所有前導零。所以sometimmes我輸入源XML中的不同日期格式

<col11>11/14/2014</col11> 

,但有時它看起來像這樣

<col11>1/5/2015</col15> 

所以我用這個來格式化,

<outputcolumn> 
    <xsl:variable name="date1" select="col11"/> 
    <xsl:variable name="formatted_date1" select="concat(substring($date1,7,4),'-',substring($date1,1,2),'-',substring($date1,4,2))"/> 
    <xsl:value-of select="$formatted_date1"/> 
    </outputcolumn> 

,對於第一次輸入的偉大工程,但不是第二個丟棄前導零的那個。

如何格式化導致不同格式的前導零被刪除的日期?

回答

2

你可以tokenize()format-number() ......

<xsl:template match="col11"> 
    <xsl:variable name="tokens" select="tokenize(normalize-space(),'/')"/> 
    <outputcolumn> 
    <xsl:value-of 
     select="($tokens[3], 
     format-number(number($tokens[1]),'00'), 
     format-number(number($tokens[2]),'00'))" 
     separator="-"/> 
    </outputcolumn> 
</xsl:template> 
0

除了@Daniel海利的解決方案[學分去他]:

創建的SchemaType「XS有效日期:日期( )」 [格式:YYYY-MM-DD]:

<xsl:variable name="dateparts" select="tokenize(normalize-space(),'/')"/> 
<xsl:variable name="validdate" select="concat($dateparts[3], '-', format-number(number($dateparts[1]), '00'), '-', format-number(number($dateparts[2]), '00'))"/> 

功能format-datew3#function-format-date

<xsl:value-of select="format-date(xs:date($validdate), '[Y0001]-[M01]-[D01]')"/> 

提示命名空間前綴xs必須定義爲​​

+0

您的日期已經在YYYY-MM-DD格式,所以格式化使用'格式的日期()'無所作爲。如果是YYYY-MM-DD,則爲 –

+0

。對於其他任何可能的輸出格式,這是一種可行的方法。 – uL1

+0

對於其他任何可能的輸出格式,您可以在不經過YYYY-MM-DD的情況下以合適的格式組裝令牌。 –