[Home] [By Thread] [By Date] [Recent Entries]
Hello
I am using Saxon-SA9.1.0.6 to transform the following XML file: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="results1.xsl"?> <results>
<match date="1998-06-10">
<team score="2">Brazil</team>
<team score="1">Scotland</team>
</match>
<match date="1998-06-10">
<team score="2">Morocco</team>
<team score="2">Norway</team>
</match>
<match date="1998-06-16">
<team score="1">Scotland</team>
<team score="1">Norway</team>
</match>
<match date="1998-06-16">
<team score="3">Brazil</team>
<team score="0">Morocco</team>
</match>
<match date="1998-06-23">
<team score="1">Brazil</team>
<team score="2">Norway</team>
</match>
<match date="1998-06-23">
<team score="0">Scotland</team>
<team score="3">Morocco</team>
</match>
</results>with the stylesheet <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform " xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my="http://leostuder.ch" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="fn xs my"> <xsl:output method="xhtml" encoding="ISO-8859-1" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd "/> <xsl:import-schema namespace="http://www.w3.org/1999/xhtml" schema-location="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd "/> <xsl:function name="my:MakeTableRow"> <xsl:param name="team"/> <xsl:param name="matches"/> <tr> <td> <xsl:value-of select="$team"/> </td> <td> <xsl:value-of select="fn:count($matches)"/> </td> <xsl:variable name="won" select="fn:count($matches[team[.=$team]/@score gt team[.!=$team]/@score])" as="xs:integer"/> <td> <xsl:value-of select="$won"/> </td> <td> <xsl:value-of select="fn:count($matches[team[.=$team]/@score lt team[.!=$team]/@score])"/> </td> <xsl:variable name="drawn" select="fn:count($matches[team[.=$team]/@score eq team[.!=$team]/@score])" as="xs:integer"/> <td> <xsl:value-of select="$drawn"/> </td> <td> <xsl:value-of select="fn:sum($matches/team[.=$team]/ @score)"/> </td> <td> <xsl:value-of select="fn:sum($matches/team[.!=$team]/ @score)"/> </td> <td> <xsl:value-of select="3*$won+$drawn"/> </td> </tr> </xsl:function> <xsl:template match="/">
<html xsl:validation="strict">
<head>
<title>Spielresultate</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template> <xsl:template match="results">
<h2>Results</h2> <table cellpadding="10">
<thead>
<tr>
<td>Team</td>
<td>Played</td>
<td>Won</td>
<td>Lost</td>
<td>Drawn</td>
<td>For</td>
<td>Against</td>
<td>Points</td>
</tr>
</thead><xsl:for-each-group select="/results/match" group- by="team"> <xsl:variable name="tableRow" select="my:MakeTableRow(current-grouping-key(),current-group())"/> <xsl:copy-of select="$tableRow"/> </xsl:for-each-group> </table> </xsl:template> </xsl:stylesheet> In the tag <xsl:for-each-group select="/results/match" group-by="team"> I would like to sort the outcome by the $tableRow/td[8] contents (i.e. the points) . How do I do that? The approach <xsl:for-each-group select="/results/match" group-by="team"> <xsl:sort select="my:MakeTableRow(current-grouping- key(),current-group())/td[8]" order="descending"/> <xsl:copy-of select="my:MakeTableRow(current-grouping- key(),current-group())"/> </xsl:for-each-group> does not do the job, no error however. Calling the function my:MakeTableRow twice seems also quite off... Any suggestions? Thanks in advance Leo
|

Cart



