1

XML ファイルに次の値があります。

<document>
  <effectiveTime value="20131008"/>
  <item>
    <effectiveTime>
      <low value=20131008"/>
    </effectiveTime>
  </item>
</document>

xsl ファイルの一部として次のものがあります。

<xsl:variable name="today">
    <xsl:call-template name="formatDate">
        <xsl:with-param name="date" select ="/Document/effectiveTime/@value" />
    </xsl:call-template>
</xsl:variable>

<!-- template for date formatting from xml document -->
<xsl:template name="formatDate">
    <xsl:param name="date" />
    <xsl:variable name="year" select="substring($date, 1, 4)" />
    <xsl:variable name="month" select="number(substring($date, 5, 2))" />
    <xsl:variable name="day" select="substring($date, 7, 2)" />
    <xsl:value-of select="concat($month, '/', $day, '/', $year)" />
</xsl:template>

<!-- template for comparing against the date of visit -->
<xsl:template name="compareToday">
    <xsl:param name="date"/>
    <xsl:if test="$date = $today">
            <xsl:text>true</xsl:text>
    </xsl:if>
</xsl:template>

/document/item/effectivetime/low/@value を変数 $today に保存した値と比較して、出力 (html) の行を太字にする必要があります。これは私が現在比較を行うために持っているものです:

<xsl:variable name="IsToday">
    <xsl:call-template name="compareToday">
        <xsl:with-param name="date" select="/document/item/effectiveTime/low/@value"/>
    </xsl:call-template>
</xsl:variable>
<span>
    <xsl:if test="$IsToday = 'true'">
        <xsl:attribute name="style">
            <xsl:text>font-weight:bold;</xsl:text>
        </xsl:attribute>
    </xsl:if>
    <xsl:value-of select="/document/item/effectiveTime/low/@value" />
</span>

20131008 を 10/08/2013 と比較しようとしているため、これは機能しません。比較を行う前に、最初にフォーマットを行うことができないようです。ドキュメント内の日付のほとんど (すべてではない) は YYYYMMDD 形式です。

ありがとう

4

2 に答える 2

1

私は自分が何をする必要があるかを理解しました。最初に、正しくフォーマットされた現在の日付で変数を作成する必要があります。次に、その変数名を比較に渡します。

<xsl:variable name="itemDate">
    <xsl:call-template name="formatDate">
        <xsl:with-param name="date"  select="/document/item/effectiveTime/low/@value"/>
    </xsl:call-template>
</xsl:variable>
<xsl:variable name="IsToday">
    <xsl:call-template name="compareToday">
        <xsl:with-param name="date" select="$itemDate"/>
    </xsl:call-template>
</xsl:variable>

これにより、書式設定に関してりんごとりんごを比較することができます。

于 2013-10-08T19:02:29.553 に答える
1

以下の調整をお試しください

<xsl:variable name="IsToday">
    <!-- Store formated date in temporary variable -->
    <xsl:variable name="tmp">
        <xsl:call-template name="formatDate">
            <xsl:with-param name="date" select="/document/item/effectiveTime/low/@value"/>
        </xsl:call-template>
    </xsl:variable>

    <xsl:call-template name="compareToday">
        <!-- Pass temporary variable into compare template -->
        <xsl:with-param name="date" select="$tmp"/>
    </xsl:call-template>
</xsl:variable>

または、別の名前付きテンプレートの呼び出しを xsl:with-param 要素のようにネストすることもできます

<xsl:variable name="IsToday">
    <xsl:call-template name="compareToday">
        <xsl:with-param name="date">
            <!-- Another named template call nested in xsl:with-param -->
            <xsl:call-template name="formatDate">
                <xsl:with-param name="date" select="/document/item/effectiveTime/low/@value"/>
            </xsl:call-template>
        </xsl:with-param>
    </xsl:call-template>
</xsl:variable>
于 2013-10-08T19:05:00.470 に答える