2

我在下面写了一些简单的 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!(因为两个日期不匹配)。我做了什么来得到错误的结果?

4

3 回答 3

2

您缺少一些美元符号-应该是

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

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

于 2013-09-03T20:55:49.040 回答
0

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

<xsl:when test='$OrderCreateDate != $OrderEditDate'>
于 2013-09-03T21:10:19.100 回答
-1

最好的方法是:

不使用字符串函数也是正确的,但有时它不起作用

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

于 2015-01-28T13:58:08.473 回答