我正在尝试在特定日期之前获取数据。因此,应显示此日期之后元素内的任何数据,否则不显示。这就是我要做的:
<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>
"释放"的类型是 xs:date 在架构中。每当我尝试运行此条件时,都会返回空结果,就好像无法满足此条件一样,而数据之后的数据中有条目。任何帮助都将不胜感激。
XSLT 1.0对日期没有任何识别。进行releaseDate > 2018-09-15
实际上与执行releaseDate > 1992
相同(因为它被解析为数字表达式,而2018-09-15 = 1992)
您可以尝试将其放在撇号中,例如releaseDate > '2018-09-15'
,但这也不起作用,因为字符串比较在XSLT 1.0中受到限制,因此>
操作员在字符串上不起作用。
因此,您可以做的(在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]">