4

XML 属性があり、XSLT を使用<EventDate>2011-06-16 08:00:00</EventDate>して抽出したいと考えています。08:00:00

w3schoolsfn:hours-from-dateTime(datetime)のおかげであることがわかりました。だから私は疑問に思っています、なぜないのですか?fn:time-from-dateTime(datetime)

そして、どのように使用するのですか?私の現在のコードは次のとおりです。

<td><xsl:value-of select="@EventDate"/></td>

dateTime を正しく表示します。でも :

 <td><xsl:value-of select="hours-from-dateTime(@EventDate)"/></td>

うまくいきません。

最後に、実行するよりもエレガントなものはありますか:

<td><xsl:value-of select="hours-from-dateTime(@EventDate)"/>:
<xsl:value-of select="minutes-from-dateTime(@EventDate)"/>:
<xsl:value-of select="seconds-from-dateTime(@EventDate)"/></td>

?

4

3 に答える 3

6

キャストまたはコンストラクター関数を使用するだけです。

<xsl:value-of select="xs:time(@dateTime)"/>

これは、スキーマ処理の結果として、属性 @dateTime が xs:dateTime 型であると想定しています。スキーマ認識プロセッサを実行していない場合は、最初に xs:dateTime にキャストする必要があります。

<xsl:value-of select="xs:time(xs:dateTime((@dateTime))"/>

もちろん、これが機能するには、日付と時刻の間のスペースが「T」である必要があります。

于 2011-06-17T09:56:48.683 に答える
2

両方の提案に感謝しますが、dateTime変数として実際に必要としなかったため、文字列として扱い、次を使用しました:

<xsl:value-of select="substring-after(@EventDate, ' ')"/>
于 2011-06-17T13:55:08.373 に答える
1

開始する日付には時間区切り文字「T」がないため、dateTime 関数を使用する場合はそれを挿入する必要があります。

次のことをお勧めします。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs fn" version="2.0"
   xmlns:fn="http://www.w3.org/2005/xpath-functions">
   <xsl:template match="/">
    <foo>
        <xsl:variable name="time" select="translate(string(/input), ' ', 'T')"/>
        <xsl:value-of select="fn:format-dateTime(xs:dateTime($time), '[h]:[m01]:[s01]')"/>        
    </foo>
</xsl:template>

これは、次のような入力を想定しています。

<input>2011-06-16 09:00:00</input>

詳細については、xslt20 仕様のformat-dateTime関数を参照してください。「picture string」引数を使用して日時値をフォーマットするためのさまざまなオプションがあります。

于 2011-06-16T21:14:29.413 に答える