このスタイルシート...
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="UTF-8"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd" />
<xsl:template match="/">
<HTML><head><title>Summary of Chattels</title></head>
<BODY>
<xsl:choose>
<xsl:when test="count( farm/pen/*[namespace-uri()='']) != 0">
<table style="border: 1px solid #808080">
<tr><th>ANIMAL</th> <th>VALUE</th></tr>
<xsl:for-each-group select="farm/pen/*[namespace-uri()='']" group-by="local-name()" >
<xsl:sort select="sum( current-group())" data-type="number" order="ascending" />
<xsl:sort select="local-name()" data-type="text" order="ascending" />
<tr><td><xsl:value-of select="local-name()" /></td>
<td><xsl:value-of select="sum( current-group())" /></td></tr>
</xsl:for-each-group>
</table>
</xsl:when>
<xsl:otherwise>
<p>There are no chattels.</p>
</xsl:otherwise>
</xsl:choose>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
指定されたサンプル ファイルに対してこの html を生成します ...
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Summary of Chattels</title>
</head>
<BODY>
<table style="border: 1px solid #808080">
<tr>
<th>ANIMAL</th>
<th>VALUE</th>
</tr>
<tr>
<td>pig</td>
<td>5</td>
</tr>
<tr>
<td>cow</td>
<td>8</td>
</tr>
<tr>
<td>chicken</td>
<td>11</td>
</tr>
<tr>
<td>sheep</td>
<td>19</td>
</tr>
</table>
</BODY>
</HTML>
テキスト出力が必要な場合は、テキストを調整するのは簡単なことです。
ファームが空の場合、代わりに次の出力が得られます ...
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Summary of Chattels</title>
</head>
<BODY>
<p>There are no chattels.</p>
</BODY>
</HTML>