XSLT嵌套循环和总计

问题描述:

我不了解嵌套循环和保持全局值的XSLT。以下是我想要达到的。XSLT嵌套循环和总计

标准(等级1) 学生(等级2) 结果(等级3) - >这个调用过程来看待所有受试者的每个结果(标志),并且当该标记是上述40

显示

现在的要求是,我需要添加40以上的所有科目的成绩/标记。另外,我需要获得所有学生的总成绩。

在XSLT中,范围在循环下一个学生时不再有效。我如何保留全球变量中所有学生的总和?

感谢您提供任何帮助。

Sample

需要计算所有科目的总和谁标记比40.黄色突出显示的内容不应被视为计算总和所有学生。

+0

如果您要提供您想要使用的XML样本,这将有很大帮助。 –

+0

如果输入XML的样本和预期的输出在问题中提供,而不是作为外部站点上的图像提供,那么这也将有所帮助。 –

XSLT是一种功能语言;变量在声明时被赋值,并且它们的值永远不会改变。

因此,在XSLT中,不像其他编程语言似乎塑造了您的想法,您不计算每个学生的所有标记的总和,或者大于40的所有标记的总和。您应该声明一个top-级别变量并指定其值应该是什么。类似于

<!--* 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属性,代表该学生在该主题中给出的标记。