1

XSLT2.0/XPath2.0 で日付文字列を解析しようとしています。問題は、日付が標準形式ではないため、文字列操作だけでなく計算が必要になることです。具体的に言うと、日付は「yyyyDDD」のパターンで表示されます (そうです、年の後に通算日が続きます)。

たとえば、2013051 == 2013 年 2 月 20 日

私はこの質問をしばらく調査してきましたが、次のような役に立たない多くの回答を見つけました。

  • 部分文字列を使用した日付の解析: 通算日から月と日を計算する必要があります
  • date:parse-date: Saxon ではサポートされていません (現在、SaxonEE の評価版を使用しています。この拡張機能のサポートが追加される場合は、喜んで耳を傾けます!)
  • スクリプトを使用する: コードを簡素化するために、XSLT で MSXML/Javascript から離れようとしています。
  • 日付を手で計算する: 最近では、日付を正確に計算するには日付の博士号が必要です...エッジケースが多すぎて、安全に車輪を再発明することはできません。
  • 日付を標準形式で XSLT に渡す: 従来のプログラマーのジレンマに戻るために、この XSLT への入力を制御することはできません。

Java メソッドの Date.parse() はまさに私がここで必要としているものであり、XSLT で日付を処理する標準的な方法がないとは信じがたいです。

4

1 に答える 1

3

XPath 2 には特別な解析関数はありませんが、日時計算用の関数が多数あります。

そのため、年の最初の日の日付を作成し、それに日のオフセットを追加できます。入力文字列が にある場合は、次の$inputxpath 式を XSLT に挿入するだけです。

xs:date(concat(substring($input, 1, 4), "-01-01")) + xs:dayTimeDuration(concat("P",number(substring($input,5, 3)) - 1, "D"))
于 2013-10-02T00:34:23.967 に答える