我正在尝试找到一种计算父节点中相同节点总和的方法。
我有这个XML代码:
<course>
<user name="Jack">
<ExerciceNote note="50" />
<Information>The second exercice</Information>
<ExerciceNote note="90" />
</user>
<user name="Peter">
<ExerciceNote note="60" />
<ExerciceNote note="80" />
<Information>The last exercice</Information>
<ExerciceNote note="75" />
</user>
</course>
我想计算每个练习的总和:
<xsl:template match="course">
<html>
<body>
<p>Student name: <xsl:apply-templates select="user" />
<xsl:value-of select="@name" /> </p>
</body>
</html>
</xsl:template>
<xsl:template match="user">
<xsl:value-of select="@name" />
<xsl:apply-templates select="ExerciceNote" />
</xsl:template>
<xsl:template match="ExerciceNote">
<xsl:value-of select="sum(???)" />
</xsl:template>
我尝试了很多东西来取代???
我想要一个这样的结果:
Jack
total = 140
Peter
total = 215
答案 0 :(得分:2)
您不必遍历ExerciceNotes,您可以保持“用户级别”以获取所需的数据。或者更确切地说,sum()
期望您指定一组具有数字内容的元素,例如,作为当前所选用户的子项的ExerciceNotes的属性@note
值,而不是单个值。
试试这个XSLT样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="user">
<p><xsl:text>Student name: </xsl:text>
<xsl:value-of select="@name"/>
</p>
<p><xsl:text>total = </xsl:text>
<xsl:value-of select="sum(ExerciceNote/@note)"/>
</p>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
另一个简单的模板
a)对每个用户进行迭代,然后计算总和
提供的帮助<xsl:template match="*">
<table>
<xsl:for-each select="/course/user">
<tr>
<td>
<xsl:value-of select="@name" />
</td>
</tr>
<tr>
<td>
Total =
<xsl:value-of select="sum(./ExerciceNote/@note)" />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>