1

おはようございます。このトピックに関する多くの回答を確認しましたが、成功しませんでした...非常に申し訳ありません...

「コース」要素(「セアンス」)を持つ要素「コース」(「セアンス」)を持つxmlドキュメントを取得しました:(不要な詳細を削除しました)

....
<seances>
    <seance date="2014-09-10T00:00:01">
...details in a 'seance'
    </seance>
    <seance date="2013-09-10T00:00:01">
...
    </seance>
...other 'seance' elements
</seances>

私のxsltスタイルシートはhtmlドキュメントを生成します:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"   
    xmlns:date="http://exslt.org/dates-and-times" 
        extension-element-prefixes="date" 
    xmlns:gr="http://www.w3.org/2000/svg"  >

<xsl:output method="html" encoding="iso-8859-1" indent="yes"  />
<xsl:import href="date.xsl" />

その日の日付を記憶するには:

<xsl:variable name="ddj" as="xs:dateTime" select="date:date-time()"/>

コースの日付がOKの場合(日付が未来ではない)、要素コースのみを表示したい:

私はこのような多くの条件を試しましたが、常に false です:

<xsl:template match="seance">
    <xsl:variable name="dateseance" as="xs:dateTime" select="@date"/>
    <xsl:value-of select="$dateseance" /><xsl:value-of select="$ddj" />
    <xsl:choose>
       <xsl:when test="$ddj  &gt;=  $dateseance">
          <xsl:text>-OK-</xsl:text>
       </xsl:when>
       <xsl:otherwise>
          <xsl:text>-Not OK-</xsl:text>
       </xsl:otherwise>
    </xsl:choose>   
 </xsl:template> 

日付は問題ないようですが、次のように出力されます。

2014-09-10T00:00:012013-09-11T10:00:00.004+02:00-Not OK- (印刷されません!)

他の行は「OK」でなければなりません:

2013-09-10T00:00:012013-09-11T10:00:00.004+02:00-いいえ- 2012-09-10T00:00:012013-09-11T10:00:00.004+02:00-いいえ- 2012-09-10T00:00:012013-09-11T10:00:00.004+02:00-ダメ-

それが理解できることを願っています...

助けてくれてありがとう。

精度 : mozilla/firefox で処理します

4

2 に答える 2

2

以下は、タイム ゾーンを無視し、両方の日付/時刻の値が同じタイム ゾーンにあると想定する XSLT 1.0 ソリューションです。

T:\ftemp>type dates.xml
<seances>
    <seance date="2014-09-10T00:00:01">
...details in a 'seance'
    </seance>
    <seance date="2013-09-10T00:00:01">
...
    </seance>
...other 'seance' elements
</seances>

T:\ftemp>xslt dates.xml dates.xsl
2014-09-10T00:00:01 2013-09-11T14:30:13 -Not OK-
2013-09-10T00:00:01 2013-09-11T14:30:13 -OK-

T:\ftemp>type dates.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:date="http://exslt.org/dates-and-times"
                extension-element-prefixes="date"
                version="1.0"
                xmlns:gr="http://www.w3.org/2000/svg"  >

<xsl:output method="html" encoding="iso-8859-1" indent="yes"  />

<xsl:variable name="ddj" select="substring(date:date-time(),1,19)"/>

<xsl:template match="seances">
  <xsl:apply-templates select="seance"/>
</xsl:template>

<xsl:template match="seance">
    <xsl:variable name="dateseance" select="@date"/>
    <xsl:value-of select="$dateseance" />
    <xsl:text> </xsl:text>
    <xsl:value-of select="$ddj" />
    <xsl:text> </xsl:text>
    <xsl:choose>
       <xsl:when test="translate($ddj,':T-','')  >=
                       translate($dateseance,':T-','')">
          <xsl:text>-OK-</xsl:text>
       </xsl:when>
       <xsl:otherwise>
          <xsl:text>-Not OK-</xsl:text>
       </xsl:otherwise>
    </xsl:choose>
  <xsl:text>&#xa;</xsl:text>
 </xsl:template>

</xsl:stylesheet>
T:\ftemp>

これは、日付/時刻の値を数値に変換するため機能します。XSLT 1.0 では、 と を使用して比較でき>ます<

于 2013-09-11T18:32:28.613 に答える
0

日付と時刻に XSLT 2.0 の組み込み機能を使用する場合、問題はないようです。

T:\ftemp>type dates.xml
<seances>
    <seance date="2014-09-10T00:00:01">
...details in a 'seance'
    </seance>
    <seance date="2013-09-10T00:00:01">
...
    </seance>
...other 'seance' elements
</seances>

T:\ftemp>xslt2 dates.xml dates.xsl
2014-09-10T00:00:012013-09-11T13:34:59.992-04:00-Not OK-
2013-09-10T00:00:012013-09-11T13:34:59.992-04:00-OK-

T:\ftemp>type dates.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
       exclude-result-prefixes="xs"
version="2.0"
    xmlns:gr="http://www.w3.org/2000/svg"  >

<xsl:output method="html" encoding="iso-8859-1" indent="yes"  />

<xsl:variable name="ddj" as="xs:dateTime" select="current-dateTime()"/>

<xsl:template match="seances">
  <xsl:apply-templates select="seance"/>
</xsl:template>

<xsl:template match="seance">
    <xsl:variable name="dateseance" as="xs:dateTime" select="@date"/>
    <xsl:value-of select="$dateseance" /><xsl:value-of select="$ddj" />
    <xsl:choose>
       <xsl:when test="$ddj  &gt;=  $dateseance">
          <xsl:text>-OK-</xsl:text>
       </xsl:when>
       <xsl:otherwise>
          <xsl:text>-Not OK-</xsl:text>
       </xsl:otherwise>
    </xsl:choose>
  <xsl:text>&#xa;</xsl:text>
 </xsl:template>

</xsl:stylesheet>
T:\ftemp>

exslt を使用する必要があると感じる理由はありますか?

于 2013-09-11T17:36:50.090 に答える