2011-10-05 109 views
1
<xsl:variable name="date1" select="2011-10-05"/> 
<xsl:variable name="date2" select="2011-10-05"/> 
<xsl:variable name="date3" select="2011-10-06"/> 

<xsl:if test="$date2 = $date1 or $date2 &lt; $date1"> 
    ..do something 
</xsl:if> 

<xsl:if test="$date3 = $date1 or $date3 &gt; $date1"> 
.. do something 
</xsl:if> 

两者都应评估为真,但第二个如果不是。对于我的生活,我无法理解为什么!XSLT日期比较

在实际的转换日期本身是从XML文档绘制,但通过VS2010调试我可以看到值如上。

一定是相当重要的事我做错了 - 任何帮助将是辉煌!

+0

XSLT 1.0或2.0? –

回答

2

我想这在氧气/ XML ... select="2011-10-05被解释为一个算术表达式,给1996年的值(2011年减10减5)和"2011-10-06"被intrepreted在1995年

你需要的是

<xsl:variable name="date1" select="'2011-10-05'"/> 
<xsl:variable name="date2" select="'2011-10-05'"/> 
<xsl:variable name="date3" select="'2011-10-06'"/> 

请注意额外的单引号。

XSLT 1.0 Specification

如果变量结合元件具有选择属性,则该值的属性的 必须是表达和可变 的值是从评估结果的对象表达方式。

+0

更好的是,声明变量的类型为date。如果你养成这样做的习惯,令人惊讶的是,像这样的许多愚蠢的错误导致了明智的错误消息,而不是混淆错误的输出。 ' –

+0

当然同意,但由于OP没有指定,他提到了Visual Studio,我假定XSLT 1.0。 –