我在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 / @值与我今天存储在变量$中的值进行比较,以便我可以在输出(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与2013年8月10日进行比较。在进行比较之前,我似乎无法先完成格式化。我文档中的大多数(但不是全部)日期都是YYYYMMDD格式。
由于
答案 0 :(得分:1)
我意识到我需要做什么。我必须首先使用当前日期创建一个格式正确的变量。然后将该变量名称传递给compare。
<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>
这允许我在格式方面比较苹果和苹果。
答案 1 :(得分: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>