2016-09-15 13 views
1

私はXSLT 2.0を使用して、MM/dd/yyyyからyyyy-MM-ddに日付を変換しています。私のソースがすべての先行ゼロを落としたことに気付くまで、それは十分に単純だったようでした。ので、私の入力がソースXMLの異なる日付形式

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

あるsometimmes時にはそれが最初の入力のために素晴らしい作品。この

<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番目のものではありません。

先頭のゼロがフォーマットが異なるために削除された日付はどのように書式設定しますか? @Danielヘイリーのソリューションに加えて、

答えて

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

[クレジットは彼に行く]:

た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を経由せずに、正しいフォーマットでトークンをアセンブルすることができます。 –