早上好, 我已经检查了很多关于这个主题的回复,但没有成功......非常抱歉...
我有一个带有'课程'(“seances”)元素的xml文档,其中包含'课程'éléments(“seance”):(我删除了不必要的细节)
....
<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()"/>
我想在课程日期合适时才显示元素课程(日期不是将来):
我尝试过很多像这样的条件,但总是错误的:
<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 >= $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-不行 - (不会打印!)
其他行应该是“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-不行 - 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中处理它
答案 0 :(得分: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>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
T:\ftemp>
这是有效的,因为它将日期/时间值转换为可以使用>
和<
在XSLT 1.0中进行比较的数字。
答案 1 :(得分: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 >= $dateseance">
<xsl:text>-OK-</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>-Not OK-</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
T:\ftemp>
你觉得有必要使用exslt吗?