You are here:   Documentation > Grouping and Total
  |  Login

Original Table

Minimize
PlayerPoints
A2
B4
A3
A4
B1
C13

Grouping and Total

Minimize
Player Sum of Points
A 9
B 5
C 13

Simple Text

Minimize

Grouping is done by Munchian Grouping in line 4 and 19, the total is calculated with the XPath sum function in line 13.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:udt="DotNetNuke/UserDefinedTable" exclude-result-prefixes="udt">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
  <xsl:key name="data-by-player" match="udt:Data" use="udt:Player" />

  <xsl:template match="udt:Data" mode="list">
    <tr class="Normal">
      <td>
        <xsl:value-of select="udt:Player" disable-output-escaping="yes" />
      </td>
      <td>
        <xsl:variable name="player" select="udt:Player" />
        <xsl:value-of select="sum(//udt:Data[udt:Player=$player]/udt:Points)" disable-output-escaping="yes" />
      </td>
    </tr>
  </xsl:template>

  <xsl:template match="/udt:UserDefinedTable">
    <xsl:variable name="currentData" select="udt:Data[count(. | key('data-by-player', udt:Player)[1]) = 1]" />
    <xsl:if test="$currentData">
      <table>
        <tr>
          <th>Player</th>
          <th>Sum of Points</th>
        </tr>
        <xsl:apply-templates select="$currentData" mode="list">
        </xsl:apply-templates>
      </table>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>