date:format-date テンプレート EXSLT ファイルを使用しています。XSLT 1.0 と MSXML3.0 をプロセッサとして使用しています。
私の date:format-date テンプレート EXSLT ファイルの宣言は次のとおりです。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="msxsl date str">
...
</xsl:stylesheet>
サードパーティの制限により、document() 関数を使用できません。そこで、XML スニペットから(同様に) 月と日を変更しました。
<date:months>
<date:month length="31" abbr="Jan">January</date:month>
<date:month length="28" abbr="Feb">February</date:month>
<date:month length="31" abbr="Mar">March</date:month>
<date:month length="30" abbr="Apr">April</date:month>
<date:month length="31" abbr="May">May</date:month>
<date:month length="30" abbr="Jun">June</date:month>
<date:month length="31" abbr="Jul">July</date:month>
<date:month length="31" abbr="Aug">August</date:month>
<date:month length="30" abbr="Sep">September</date:month>
<date:month length="31" abbr="Oct">October</date:month>
<date:month length="30" abbr="Nov">November</date:month>
<date:month length="31" abbr="Dec">December</date:month>
</date:months>
変数に:
<xsl:variable name="months">
<month length="31" abbr="Jan">January</month>
<month length="28" abbr="Feb">February</month>
<month length="31" abbr="Mar">March</month>
<month length="30" abbr="Apr">April</month>
<month length="31" abbr="May">May</month>
<month length="30" abbr="Jun">June</month>
<month length="31" abbr="Jul">July</month>
<month length="31" abbr="Aug">August</month>
<month length="30" abbr="Sep">September</month>
<month length="31" abbr="Oct">October</month>
<month length="30" abbr="Nov">November</month>
<month length="31" abbr="Dec">December</month>
</xsl:variable>
それに応じて、元々 document() 関数を使用していたコードを次のように変更しました:
[EXSLT スタイルシートの月処理ビットから]
<xsl:variable name="month-node" select="document('')/*/date:months/date:month[number($month)]" />
MSXML3.0ノードセット関数を使用するには:
<xsl:variable name="month-node" select="msxsl:node-set($months)/month[number($month)]" />
だから、これはうまくいくだろうと思いました。
EXLT の指示によると、「フォーマット パターン文字列は、JDK 1.1 SimpleDateFormat クラスの説明どおりに解釈されます。」 [現在のバージョンを使用しました]。
SimpleDateFormat クラスに従って月を'dd MMMMM yyyy' として指定しているので、月は完全な月の名前 (1 月など) になります。しかし、それは機能しません:(私はEXSLTスタイルシートを調べましたが、それを行うロジックがあります。また、「E」パターンを使用して曜日の名前を表示するロジックがありますが、これは機能しませんdocument() の使用から変数への変更がそれを壊したのかもしれません。
本当に助けていただければ幸いです。
どうもありがとう!
例
<xsl:call-template name="date:format-date">
<xsl:with-param name="date-time" select="'2010-07-01'"/>
<xsl:with-param name="pattern" select="'dd MMMMM yyyy'" />
</xsl:call-template>
SimpleDateFormat クラスのドキュメントから理解しているように、これは2010 年 7 月 1 日になるはずであり、得られるのは01 07 2010です。
<xsl:call-template name="date:format-date">
<xsl:with-param name="date-time" select="'2010-07-01'"/>
<xsl:with-param name="pattern" select="'EEE, dd MMMMM yyyy'" />
</xsl:call-template>
これにより、 2010 年 7 月 1 日月曜日になり、2010 年 7 月1日 01 07が得られます。