我有一个像这样的transcript.xml,想要计算gpa
<?xml version="1.0" encoding="UTF-8"?>
<transcript>
<courses>
<course>
<code>IK2210</code>
<credits>3</credits>
<grade>A</grade>
</course>
<course>
<code>IB2210</code>
<credits>3</credits>
<grade>A</grade>
</course>
<course>
<code>IB2210</code>
<credits>1</credits>
<grade>C</grade>
</course>
<course>
<code>ID1234</code>
<credits>2</credits>
<grade>B</grade>
</course>
</courses>
</transcript>
我像这样导入了成绩单
<xsl:variable name="transcript" select="document('transcript2.xml')/transcript"/>
我试图这样做
<xsl:value-of select=" (4*(sum($transcript/courses/course/credits[$transcript/courses/course/grade='A'])) + 3*(sum($transcript/courses/course/credits[$transcript/courses/course/grade='B'])) + 2*(sum($transcript/courses/course/credits[$transcript/courses/course/grade='C'])) + 1*(sum($transcript/courses/course/credits[$transcript/courses/course/grade='D']))) div (sum($transcript/courses/course/credits))"/>
但是部分
(sum($transcript/courses/course/credits[$transcript/courses/course/grade='A']))
总结所有学分
如何检查病情? 感谢
答案 0 :(得分:2)
我相信如果不使用以下代码,您的公式就会有效:
(sum($transcript/courses/course/credits[$transcript/courses/course/grade='A']))
您使用过:
(sum($transcript/courses/course[grade='A']/credits))
但也许这更简洁:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="kGrade" match="credits" use="../grade"/>
<xsl:template match="/">
<root>
<xsl:variable name="transcript" select="document('SOTranscript.xml')/transcript" />
<xsl:apply-templates select="$transcript" mode="getTotal" />
</root>
</xsl:template>
<xsl:template match="transcript" mode="getTotal">
<xsl:value-of
select="(4 * sum(key('kGrade', 'A')) +
3 * sum(key('kGrade', 'B')) +
2 * sum(key('kGrade', 'C')) +
sum(key('kGrade', 'D'))
) div sum(courses/course/credits)"/>
</xsl:template>
</xsl:stylesheet>
在样本输入上使用时,结果为:
<root>3.5555555555555553</root>
我认为这是期望值。