XSLT简单算法审查

时间:2019-04-18 04:02:20

标签: xslt

我有以下XSLT代码:

<xsl:if test="position() mod 7=0 or position()=last()">
    //display logic
</xsl:if>

位于foreach循环中。

问题是,如果总数为8,而排名达到8,则我们将为两个display logic计算position 7 and position 8 sequentially

我相信解决方法类似于

<xsl:if test="(count(something)=1) or (position() mod 7=0) or (position()=last() and position() mod 7>=2)">
    //display logic
</xsl:if>

如果我们在最后一条记录中,此逻辑将确保至少2条记录出现在模数之后,并且在重击模数之前应保证最多6条记录的长度。另外,如果仅存在1条记录,我们还需要运行显示逻辑。

但我不是XSLT专家。直到今晚晚些时候,我才能够测试这种逻辑,所以我认为id方法如此,以查看是否可以得到有关这是否正确方法的答案。

谢谢。

1 个答案:

答案 0 :(得分:0)

我猜你想做(!):

<xsl:if test="position() mod 7 = 0 and last() - position() > 1 or position() = last()">

这将确保最后一组至少有2个项目。如果只有一个,它将被附加到上一组,使其成为一组8个项目。

如果您希望有6组,然后是2组,请执行以下操作:

<xsl:if test="position() mod 7 = 0 and last() - position() > 1 or position() mod 7 = 6 and last() - position() = 2 or position() = last()">

演示https://xsltfiddle.liberty-development.net/6r5Gh3q