使用XSLT过滤行集

时间:2013-09-19 06:31:32

标签: xslt

我有使用XSLT过滤的麻烦,基本上我有一个xml,我想只得到截止日期为3个月的间隔的那些项目...我写了以下内容:

<xsl:variable name="TaskRows" select="/dsQueryResponse/Tasks/Rows/Row[@DueDate &gt; $IsoBeginQuartDate AND @DueDate &lt; $IsoEndQuartDate]"/>

但是我收到一个错误:“设置处理器样式表失败:预期令牌']'找到'名称'...

以ISO格式计算IsoDates并格式化日期......

任何想法,怎么做,或者我在过滤时不能使用“AND”?

PS:我正在使用XSLT 1.0

2 个答案:

答案 0 :(得分:3)

这里有区分大小写!尝试使用'和'而不是'AND'。

答案 1 :(得分:1)

不幸的是,在XSLT 1.0中,您无法比较日期以查看日期是否介于两个值之间。

你能做的是这样的事情:

<!-- Make sure to format this variables as YYYYMMDD -->
<xsl:variable name="$IsoBeginQuartDate">20130101</xsl:variable>
<xsl:variable name="$IsoBeginQuartDate">20131231</xsl:variable>

<!-- Make sure @DueDate also has the format YYYYMMDD, in this example I assume the DueDate has format YYYY-MM-DD -->
<xsl:variable name="TaskRows" select="/dsQueryResponse/Tasks/Rows/Row[translate(@DueDate, '-', '') &gt; $IsoBeginQuartDate and translate(@DueDate, '-', '') &lt; $IsoEndQuartDate]"/>

您现在收到错误,因为&gt;&lt;或字符串或日期不支持。