XSLT在特定日期之前获取数据



我正在尝试在特定日期之前获取数据。因此,应显示此日期之后元素内的任何数据,否则不显示。这就是我要做的:

<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]">

相关内容

  • 没有找到相关文章