2

ある種の読み取り可能な形式でHTMLで日付を表示/出力するためのオプションは何ですか。つまり、date_last_activityの値を単純に表示すると、奇妙に見えます:Sそれで、私の質問は、XSLTが日付形式の変換を提供するのかということです。

XML:

<date_last_activity format="MMDDCCYY">04132012</date_last_activity>

XLSテンプレート:

<xsl:value-of select="date_last_activity"/>

HTML:

04132012

2012年4月13日のように見せたい...

XSLT 1でたくさん読んだのですが、「template」=> formatDate ...を作成することは可能だと思いますが、どこから始めればよいかわかりません:S

4

3 に答える 3

4

この変換:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="date_last_activity">
  <xsl:value-of select=
  "concat(
     substring(.,
               string-length(substring-before(@format, 'MM'))+1,
               2
               ),
     '/',
     substring(.,
               string-length(substring-before(@format, 'DD'))+1,
               2
               ),
     '/',
     substring(.,
               string-length(substring-before(@format, 'CCYY'))+1,
               4
               )

         )"/>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<date_last_activity format="MMDDCCYY">04132012</date_last_activity>

必要な正しい結果が生成されます。

04/13/2012

次の XML ドキュメントに同じ変換を適用すると、次のようになります。

<date_last_activity format="CCYYDDMM">20121304</date_last_activity>

同じ正しい結果が生成されます。

04/13/2012
于 2012-04-20T04:27:33.593 に答える
1

XSLT 2.0は、関数format-date()を提供します。ただし、使用する前に、日付をISO形式YYYY-MM-DDに変換する必要があります。これは、concatとsubstringを使用して実行できます。

それでもXSLT1.0を使い続ける場合は、www.exslt.orgで日付処理関数とテンプレートのライブラリを入手できます。

于 2012-04-20T07:44:57.320 に答える
1

複数の場所でそれを行う必要がある場合は、xsl のどこかに名前付きテンプレートを作成します

編集:フォーマットが間違っているため、テンプレートが表示されませんでした...

<xsl:template name="formats_date">
  <xsl:param name="raw_date" />
  <xsl:value-of select="concat( substring( $raw_date, 0, 2 ), '/', substring( $raw_date, 2, 2 ), '/', substring( $raw_date, 4 ) )" />
</xsl:template>

次に、次のように適用します

<xsl:call-template name="formats_date">
    <xsl:with-param name="raw_date" select="date_last_activity" />
</xsl:call-template/>

それ以外の場合は、 xsl:value-of concat... を必要な場所で直接実行できます

于 2012-04-20T00:55:33.310 に答える