我通常使用jquery模板来处理这类事情,但是我继承了一个我需要更新的XSLT文件,但我找不到一种方法来获取特定模板调用的元素总数(迭代次数)。
使用jquery模板我会做这样的事情,它会给我我正在循环的资产总数。
<span id="${spnID}">
${GroupName} (${Assets.length})
</span>
如果循环中有五个元素,这将返回“Product x(5)”。
看起来很简单但我似乎找不到用XSLT做同样事情的方法。我想是这样的事情:
<span id="{$SpnId}">
<xsl:value-of select="$GroupName"/> (<xsl:value-of select="$total-number-of-elements"/>)
</span>
答案 0 :(得分:9)
如果您循环某些$set
,则输出count($set)
以获取要迭代的项目总数。例如,试试这个样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:variable name="set" select="/table/row" />
<xsl:variable name="count" select="count($set)" />
<xsl:for-each select="$set">
<xsl:value-of select="concat(position(), ' of ', $count, '
')" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
反对这一输入:
<table>
<row id="1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5" />
<row id="6" />
</table>
输出:
1 of 6
2 of 6
3 of 6
4 of 6
5 of 6
6 of 6
请注意,我们循环遍历/table/row
选择的节点并输出count(/table/row)
以获取迭代次数。
答案 1 :(得分:2)
Wayne的回答是有效的,在某些情况下,当必须满足其他要求时,可能是必要的。但是,如果您遇到一个简单的情况,可以使用Last()函数更有效地完成。只要处理for-each,Last()就会包含集合的上限或计数。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select="/table/row">
<xsl:value-of select="concat(position(), ' of ', last(), '
')" />
</xsl:for-each>
</xsl:template>
针对相同的XML运行,输出与Wayne的结果相同。
1 of 6
2 of 6
3 of 6
4 of 6
5 of 6
6 of 6