3

XSLT 2.0を使用して、ある日付を別の日付から減算するコードを使用しています。

<xsl:template match="moveInDate">
    <xsl:value-of select="current-date() - xs:date(.)"/>
</xsl:template>

これは機能しますが、P2243Dの答えが残ります。これは、「2243日の期間」(数学的には正しい)に対応すると思います。

PとDではなく、日数だけが必要なので、部分文字列などを使用できることはわかっていますが、XSLTの初心者として、これを行うためのより優れた、よりエレガントな方法があるかどうかを知りたいです。単純な文字列操作。

4

1 に答える 1

7

fn:days-from-duration()期間をxs:integer:として取得するために使用できます。

days-from-duration($arg as xs:duration?)なのでxs:integer?

xs:integerの値の正規の字句表現で日コンポーネントを表すを返します$arg。結果はマイナスになる可能性があります。

詳細については、XQuery1.0およびXPath2.0の関数と演算子の仕様を参照してください。

あなたの場合:

<xsl:template match="moveInDate">
    <xsl:value-of select="days-from-duration(current-date() - xs:date(.))"/>
</xsl:template>

お役に立てれば!

編集:部分文字列処理を使用して、あなたが言うようにそれを行うこともできます。しかし、あなたが指摘するように、それは好まれません。何らかの理由で同様のことをしたい場合は、データ型について考える必要があります。の結果は、キャストせずに部分文字列関数で処理できないものcurrent-date() - xs:date(.)として返されます。xs:duration

<xsl:template match="moveInDate">
  <xsl:variable name="dur" select="(current-date() - xs:date(.)) cast as xs:string"/>
  <xsl:value-of select="substring-before(substring-after($dur, 'P'), 'D')"/>
</xsl:template>
于 2010-08-04T07:14:40.693 に答える