xslt创建一个计数器变量并打印结束值

xslt创建一个计数器变量并打印结束值,xslt,xslt-2.0,Xslt,Xslt 2.0,下面的xslt是从sql db获取数据的模板。(我使用JavaSpring体系结构将值传递给xslt)。可以从数据库中获取n个值(最多500个)。studentid和subject是从DB中提取的两个值。以下是数据示例 Student id | Subject 3111 | 101 3112 | 100 3113 | 110 3114 | 001 “科目”字段包含一个3位数的值,表示学生学习的物理、化学和数学科目。110表示学生只注册物理和化学。我需要计算三门课程的总和,比如分别有多少学生学过

下面的xslt是从sql db获取数据的模板。(我使用JavaSpring体系结构将值传递给xslt)。可以从数据库中获取n个值(最多500个)。studentid和subject是从DB中提取的两个值。以下是数据示例

Student id | Subject
3111 | 101
3112 | 100
3113 | 110
3114 | 001
“科目”字段包含一个3位数的值,表示学生学习的物理、化学和数学科目。110表示学生只注册物理和化学。我需要计算三门课程的总和,比如分别有多少学生学过物理,多少学生学过化学,多少学生学过数学

我首先开始尝试物理,但还没有成功。下面是我使用position()创建的xslt,用于计算总和。但是sum的输出显示如下物理(假设有6名学生注册物理) 物理计数:123456

xslt

电流输出:

Physics students: 12345
预期产出:

Physics students: 5
(我将把物理学生的解决方案应用于化学和数学科目)。
提前谢谢

这听起来更像是一个分组问题,您可以计算每个组的成员:

<xsl:for-each-group select="student" group-by="subject">
  <xsl:value-of select="current-grouping-key(), count(current-group())" separator=": "/>
</xsl:for-each-group>

您还没有显示XML输入结构,因此
select=“student”
groupby=“subject”
只是猜测,您可能需要调整它们

Physics students: 5
<xsl:for-each-group select="student" group-by="subject">
  <xsl:value-of select="current-grouping-key(), count(current-group())" separator=": "/>
</xsl:for-each-group>