1

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が得られます。

4

2 に答える 2

0

参照する EXSLT ページによると ( date:format-date template EXSLT file ):

現在のところ、date:format-date をネイティブにサポートしている XSLT プロセッサはありません。

どの実装を使用していますか? MSXML ではネイティブにサポートされていないようです。

于 2010-04-29T19:33:48.390 に答える
0

msxml:node-setXML のルートのないフラグメント (月のリストなど) でを使用すると、関数はフラグメントを含むルートを自動的に作成します。

したがって、あなたの場合、ノードセットからのパスが間違っています:

msxsl:node-set($months)/month[number($month)]

/monthは のルートではないため、これは誤りです$months。人工ルートをスキップして月に直接移動することで、簡単に修正できます。

msxsl:node-set($months)//month[number($month)]

//演算子ではなく、演算子に注意してください/

編集

テストすると、私が間違っていることがわかります。実際、あなたが使用している元のスニペットは私にとってはうまく機能します。//オペレーターは不要です。$month変数が正しく設定されていますか?

于 2010-04-28T14:00:25.770 に答える