如何在XSLT中比较两个日期变量?

时间:2013-09-03 20:41:17

标签: xml xslt

我在下面写了一些简单的XSLT。长期和短期是我想做两件事。

首先,我想打印这是否是新订单。就我的目的而言,如果OrderCreateDate和OrderEditDate字段相同,则订单是新的。

其次,我想打印两个日期(以检查我的工作;格式化并不重要。)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"                
>              
<xsl:output method="text" indent="yes"/>

<xsl:template match="/ArrayOfDP_RunDatesAll">
  <xsl:variable name='OrderCreateDate' select='DP_RunDatesAll[1]/OrderCreateDate'/>
  <xsl:variable name='OrderEditDate' select='DP_RunDatesAll[1]/OrderEditDate'/>
  <xsl:choose>
    <xsl:when test='OrderCreateDate != OrderEditDate'>
      Existing Order!
    </xsl:when>
    <xsl:otherwise>      
      New Order!
      OrderCreateDate <xsl:value-of select='$OrderCreateDate' />
      OrderEditDate   <xsl:value-of select='$OrderEditDate' />
    </xsl:otherwise>
  </xsl:choose>       
</xsl:template>  
</xsl:stylesheet>

我希望通过上面的XSLT,当处理具有两个单独日期的记录时,输出应为Existing Order!

但是,我看到以下输出。

  New Order!
  OrderCreateDate 2013-08-16T10:27:39
  OrderEditDate   2013-08-17T17:19:43.6    

根据我上面描述的规则,它应该打印Existing Order!(因为两个日期不匹配)。我在这里做了什么才能得到错误的结果?

3 个答案:

答案 0 :(得分:2)

你错过了一些美元符号 - 它应该是

<xsl:when test='$OrderCreateDate != $OrderEditDate'>

您当前的测试是尝试查找名为OrderCreateDateOrderEditDate的元素作为当前上下文节点的子节点,我认为(鉴于您的变量定义)不存在。因此,它会检查'' != ''是否为otherwise分支。

答案 1 :(得分:0)

您需要让测试正确使用变量(使用$符号)。

<xsl:when test='$OrderCreateDate != $OrderEditDate'>

答案 2 :(得分:-1)

这样做的最佳方式是:

没有字符串功能也是正确的,但有时它不起作用

&#13;
&#13;
<xsl:when test='string($OrderCreateDate) != string($OrderEditDate)'>
&#13;
&#13;
&#13;