我是xslt的新手,我正在尝试学习xslt 1.0。
我试图找出如何使用我的xml文件获取以下结果。我用我的xsl文件玩了很多但是我认为有些东西我没有得到,因为它根本不起作用......
因为我是初学者,请保持简单回答。谢谢!
结果应如下所示:
Code Number of students Average per course
INF4830 3 86.0
INF1130 3 77.7
INF1330 4 82.0
INF4930 1 40.0
这是我的xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="temptransfo.xsl" type="text/xsl" ?>
<university>
<student><name>Robert Shaw</name>
<course code="INF4830" note="90" />
<course code="INF1130" note="70" />
<course code="INF1330" note="76" /></student>
<student><name>Peter Manning</name>
<course code="INF4830" note="76" />
<course code="INF1130" note="73" />
<course code="INF1330" note="74" /></student>
<student><name>Jeff Cooper</name>
<course code="INF4930" note="40" />
<course code="INF1130" note="90" />
<course code="INF1330" note="80" /></student>
<student><name>Laureen Hanley</name>
<course code="INF4830" note="92" />
<course code="INF1330" note="98" /></student>
</university>
到目前为止,这是我的xsl文件,但它不起作用。结果中没有显示结果......
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="html"
encoding="UTF-8"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd"
indent="yes" ></xsl:output>
<xsl:key name="mytable" match="student", use="course" />
<xsl:template match="/">
<html>
<head>
<title>Test1</title>
</head>
<body>
<table border="1">
<caption>Test1</caption>
<tr>
<th>Code</th>
<th>Number of student</th>
<th>Course average</th>
</tr>
<xsl:for-each select = "//course" >
<xsl:if test="generate-id(.)=generate-id(key('mytable',course[@code])[1])">
<tr>
<td> <xsl:value-of select="@code"/> </td>
<td> <xsl:value-of select="count(//course[@code=current()/@code])"/> </td>
<td> <xsl:value-of select="(sum (//course/@note)) div (count(//course[@code]))"/> </td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
首先,您想获得一系列不同的课程;为此,你需要把钥匙交给你:
<xsl:key name="course-by-code" match="course" use="@code" />
接下来,您要重新使用密钥以获取每个课程中所有注册的列表 - 例如:
<xsl:for-each select="/university/student/course[generate-id(.)=generate-id(key('course-by-code', @code)[1])]" >
<xsl:variable name="enrollments" select="key('course-by-code', @code)"/>
<tr>
<td>
<xsl:value-of select="@code"/>
</td>
<td>
<xsl:value-of select="count($enrollments)"/>
</td>
<td>
<xsl:value-of select="sum($enrollments/@note) div count($enrollments)"/>
</td>
</tr>
</xsl:for-each>