我正在尝试在特定日期之前获取数据。因此,应该显示该日期之后元素内的任何数据,否则不显示。这就是我想要做的:
<xsl:for-each select="//magadvert">
<xsl:if test="releaseDate > 2018-09-15">
<tr>
...Do Something
</tr>
</xsl:if>
</xsl:for-each>
数据:
<magadvert advertID="1">
<releaseDate>2018-06-22</releaseDate>
<endDate>2018-09-08</endDate>
<magName>Phasellus At Augue Industries</magName>
<advertSize>3971.69</advertSize>
<position>Inside front</position>
<magCost>35217.49</magCost>
<issuesAppeared>11</issuesAppeared>
</magadvert>
在架构中,“ releaseDate”的类型为 xs:date 。每当我尝试运行此条件时,它都将返回空结果,就好像从未满足此条件一样,而数据中有此日期之后的条目。任何帮助将不胜感激。
答案 0 :(得分:2)
XSLT 1.0不能识别日期。进行releaseDate > 2018-09-15
实际上与进行releaseDate > 1992
相同(因为它被解析为数字表达式,并且2018-09-15 = 1992)
您可以尝试将其放在撇号中,例如releaseDate > '2018-09-15'
,但这也不起作用,因为在XSLT 1.0中字符串比较受到限制,因此>
运算符不适用于字符串。 / p>
因此,您可以(在XSLT 1.0中)将字符串转换为数字(通过删除连字符)并进行数字比较
<xsl:if test="number(translate(releaseDate, '-', '')) > 20180915">
或者,升级到使用可以处理日期的XSLT 2.0,然后您可以...
<xsl:if test="xs:date(releaseDate) > xs:date('2018-09-15')">
请注意,顺便说一句,您可以将if条件放在xsl:for-each
本身
<xsl:for-each select="//magadvert[number(translate(releaseDate, '-', '')) > 20180915]">