我有一个简单的for-each
如下所示。基本上我要做的就是让所有studentResults
获得某个studentID
。这部分似乎按预期工作。
if
语句检查result
的总和是否大于59
。这部分也按预期工作。
现在到了什么不起作用。一旦满足这个条件(总和大于59),它应该向上两个父母,然后在该节点中求和。如XML树所示。
XSLT
<xsl:for-each select="//studentResult[@studentID=$sid]">
<xsl:if test="sum(result) > 59">
<xsl:value-of select="sum(../../creditPoints)"/>
</xsl:if>
</xsl:for-each>
XML
<root>
<units>
<unit>
<title>Accounting I</title>
<creditPoints>20</creditPoints>
<studentResults>
<studentResult studentID="#1092">
<result>30</result>
<result>10</result>
<result>40</result>
</studentResult>
<studentResult studentID="#1800">
<result>30</result>
<result>10</result>
<result>8</result>
</studentResult>
</studentResults>
</unit>
<unit>
<title>Economics II</title>
<creditPoints>25</creditPoints>
<studentResults>
<studentResult studentID="#1092">
<result>20</result>
<result>10</result>
<result>35</result>
</studentResult>
<studentResult studentID="#2500">
<result>25</result>
<result>5</result>
<result>40</result>
</studentResult>
</studentResults>
</unit>
</units>
</root>
在提交问题之前,我想到了以下备用XSLT的想法。
替代XSLT :
即使学生不在该单元中,也会打印所有creditPoints
的总数。
<xsl:for-each select="/root/units/unit/studentResults/studentResult[@studentID=$sid][sum(result) > 59]">
<xsl:value-of select="sum(ancestor::units/unit/creditPoints)"/>
</xsl:for-each>
请注意,这是XSLT 1.0。
答案 0 :(得分:2)
或许只是用
替换整个for-each
<xsl:value-of select="sum(/root/units/unit[studentResult/studentResult[@studentID = $sid][sum(result) > 59]]/creditPoints)"/>
就是你想要的。