我在下面写了一些简单的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!
(因为两个日期不匹配)。我在这里做了什么才能得到错误的结果?
答案 0 :(得分:2)
你错过了一些美元符号 - 它应该是
<xsl:when test='$OrderCreateDate != $OrderEditDate'>
您当前的测试是尝试查找名为OrderCreateDate
和OrderEditDate
的元素作为当前上下文节点的子节点,我认为(鉴于您的变量定义)不存在。因此,它会检查'' != ''
是否为otherwise
分支。
答案 1 :(得分:0)
您需要让测试正确使用变量(使用$符号)。
<xsl:when test='$OrderCreateDate != $OrderEditDate'>
答案 2 :(得分:-1)
这样做的最佳方式是:
没有字符串功能也是正确的,但有时它不起作用
<xsl:when test='string($OrderCreateDate) != string($OrderEditDate)'>
&#13;