我有一个关于 XSLT 的问题。
在一个网站上,我有一个简单的日历,显示未来将要发生的事件。
但当一个事件完成后,它应该从我的列表中删除。我所说的“完成”是指活动的日期已经过了今天。
每个事件都附有日期。
看下面的代码:
<xsl:for-each select="$currentPage//node[@template='1238']">
<xsl:sort data-type="text" select="./data[@alias='dato']" order="ascending"/>
<div class="aktivitet_forside">
...MY EVENT CONTENT...
</div>
</xsl:for-each>
上面的代码将向我显示 template='1238' 的所有事件,这也是正确的,因为这是我的事件的模板。
但正如我之前提到的,每个事件都有一个包含日期的字段。该字段称为“dato”。这也是我对事件进行排序的编号,因此日期最接近今天的事件将显示在列表顶部。
“dato”字段的格式为:2009-08-30T08:59:00
如何自动删除“日期”字段的值超过今天日期的事件?
因此,如果今天的日期是:2009 年 9 月 3 日,则日期为 2009 年 8 月 30 日的事件不应出现在列表中。
假设您使用的是 XSLT 1.0,如果您的 XSLT 处理器支持 EXSLT 扩展,您可以使用 date:difference 函数。还有一个可用的普通 XSLT 模板,您可以根据自己的情况进行调整,以防您本身没有可用的 EXSLT。
http://www.exslt.org/date/functions/difference/index.html http://www.exslt.org/date/functions/difference/index.html
EDIT:
可能还有另一个更简单的版本,您可以将日期时间字符串转换为格式为 YYYYMMDDHHMMSS 的数字。这将自动按数字升序排序(未来的日期/时间将比以前的日期有更大的数字),然后您可以以相同的方式获取当天的日期时间字符串,并进行常规数字差异以查看该天是否在当前日期之后或之前。
<xsl:variable name="newFormat" select="translate('2009-08-30T08:59:00', '-T:', '')"/>
Gives 20090830085900
在您的 XPath 中,您可以执行此操作,假设 $currDateTime 设置为正确的翻译值并且<data>
节点有要检查的日期,您可以使用下面的..
<xsl:for-each select="$currentPage//node[@template='1238'][data[@alias='dato' and ((number(translate(. ,'-T:', '')) - number($now)) >=0)]]">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)