Hallo whine,
dieser Ansatz sollte das Prinzip der Gruppierung und Sortierung zeigen. Sortierung ggf. umkehren (descending) oder weglassen, falls die Reihenfolge des jeweils ersten Auftreten eines Chart-Wertes von Bedeutung ist (also 100 …):
<?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" version="5" encoding="UTF-8"/>
<xsl:key name="chart_group" match="Chart" use="."/>
<xsl:template match="/">
<html>
<head>
<title>Test</title>
</head>
<body>
<table>
<tr>
<th>Chart</th>
<th>Fact</th>
<th>Location</th>
</tr>
<xsl:for-each select="//Chart[generate-id() = generate-id(key('chart_group', .)[1])]">
<xsl:sort select="." data-type="number" order="ascending"/>
<xsl:variable name="akt_chart" select="."/>
<xsl:for-each select="//Chart[. = $akt_chart]">
<tr>
<td>
<xsl:value-of select="$akt_chart"/>
</td>
<td>
<xsl:value-of select="preceding::Fact[1]"/>
</td>
<td>
<xsl:value-of select="../../Coordinates"/>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Ausgabe:
<table>
<tr>
<th>Chart</th>
<th>Fact</th>
<th>Location</th>
</tr>
<tr>
<td>50</td>
<td>B</td>
<td>50.6,14.4</td>
</tr>
<!-- + 10 tr … -->
<tr>
<td>103</td>
<td>A</td>
<td>50,14</td>
</tr>
</table>
Grüße,
Thomas