我对嵌套循环和保持值全局的XSLT没有了解。以下是我想要实现的目标。
标准(层次结构1) 学生(等级2) 结果(层次3) - >这会调用一个程序来查看所有主题的每个结果(标记),并在标记高于40时显示。
现在要求是,我需要添加40岁以上的所有科目的成绩/分数。另外,我需要得到所有学生的总成绩。
在XSLT中,范围在循环通过下一个学生时不再有效。如何在全局变量中保留所有学生的总和?
感谢您提供的任何帮助。
需要为所有标记大于40的学生计算所有科目的总和。黄色突出显示的学生不应考虑计算总和。
答案 0 :(得分:0)
XSLT是一种功能语言;变量在声明时被赋值,并且它们的值永远不会改变。
因此,在XSLT中,与其他编程语言不同,它们似乎影响了您的思维,您不会计算每个学生的所有标记的总和,或者所有大于40的标记。相反,您声明顶级变量,你指定它的值应该是什么。像
这样的东西<!--* calculate the total sum of marks awarded to all students.
* (This makes no sense, but it is what the description says.
* Mine not to reason why.)
*-->
<xsl:variable name="total-marks"
select="sum(//student/subject/@mark)"/>
<!--* calculate the total sum of marks greater than 40 awarded
* to all students.
* (This also makes no sense, but it is again what the description
* appears to say. Glad this is someone else's problem, not mine.)
*-->
<xsl:variable name="total-marks-over-40"
select="sum(//student/subject/@mark[. > 40])"/>
这些变量可能无法计算正确的事情,因为我从你的描述中并不真正理解你在做什么。我想如果你以后想要用这些来计算平均标记,平均标记大于40,除以给定的标记数量,标记数量超过40,那么它们就有意义了。
这些变量不仅可以,而且几乎可以肯定,这些变量不适合您所考虑的XML结构,因为您还没有为我们描述过它。给出的样本表达式假设每个学生都由student
元素表示,该元素包含许多subject
个孩子,每个孩子都有一个数字mark
属性,表示给予该学生的标记主题。