Ben: Datensätze 2x Gruppieren

Hallo,

ich habe ein Problem! Meine XML sieht wie folgt aus:

  
<report>  
<tables>  
 <table prefix="X3">  
   <person>Max Mustermann</person>  
   <Nr>1</Nr>  
   <Maßnahme>Erster Termin</Maßnahme>  
   <Datum>01.01.2009</Datum>  
 </table>  
 <table prefix="X3">  
   <person>Max Mustermann</person>  
   <Nr>1</Nr>  
   <Maßnahme>Folgetermin</Maßnahme>  
   <Datum>02.01.2009</Datum>  
 </table>  
 <table prefix="X3">  
   <person>Max Mustermann</person>  
   <Nr>2</Nr>  
   <Maßnahme>Erster Termin</Maßnahme>  
   <Datum>03.01.2009</Datum>  
 </table>  
 <table prefix="X3">  
   <person>Hans Erwin Müller</person>  
   <Nr>1</Nr>  
   <Maßnahme>Erster Termin</Maßnahme>  
   <Datum>05.04.2009</Datum>  
 </table>  
</tables>  
</report>  
  

Ich möchte jetzt eine Tabelle erstellen in der alle Personen genau einmal stehen. In der Zeile zur Person sollen dann die verschiedenen Nummern untereinander auch genau einmal aufgelistet werden und zu den Nummern dann die verschiedenen Datumsangaben. Also in etwa so:

Name               Nr.   Datum
Max Mustermann     1     01.01.2009, 02.01.2009
                   2     03.01.2009
Hans Erwin Müller  1     05.04.2009
...

Soo bislang habe ich mir alle namen auflisten können über generate-id und key. Ich habe

  
<xsl:key name="Arzt" match="report/tables/table[@prefix='X3']" use="person"/>  
<xsl:key name="Nummer" match="report/tables/table[@prefix='X3']" use="Nr"/>  
  
<xsl:template name="auswertung>  
 <xsl:for-each select="/report/tables/table[@prefix='X3'][generate-id() = generate-id(key('Arzt', person)[1])]">  
  <xsl:variable name="n" select="person"/>  
  <tr>  
   <td>  
    <xsl:value-of select="person"/>  
   </td>  
  
<!-- jetzt versuche ich einfach noch mal eine key funktion zu verwenden - dass Problem dabei ist, dass er die Zahlen natürlich alle nur 1x anzeigt, also nur dort, wo die Zahl das erste mal auftritt - in meinem Fall zeigt er die Werte zur Nr.1 nur bei Max Mustermann an..-->  
  
   <td>  
    <table>  
     <xsl:for-each select="/report/tables/table[@prefix='X3'][Person = $n][generate-id() = generate-id(key('Nummer', Nr)[1])]">  
      <xsl:variable name="t" select="Nr"/>  
  
      <xsl:for-each select="/report/tables/table[@prefix='X3'][Person= $n ][Nr = $t]">  
  
       <tr>  
         <xsl:for-each select="/report/tables/table[@prefix='X3'][Person= $n ][Nr = $t]">  
         <xsl:if test="position() = 1">  
         <td>  
          <xsl:value-of select="Nr"/>  
         </td>  
         </xsl:if>  
         <xsl:choose>  
           <xsl:when test="Maßnahme = 'Erster Termin'">  
            <td>  
             <xsl:value-of select="Datum"/>  
            </td>  
           </xsl:when>  
           <xsl:when test="Maßnahme = 'Folgetermin'">  
            <td>  
             <xsl:value-of select="Datum"/>  
            </td>  
           </xsl:when>  
         </xsl:choose>  
..... usw.  

Ich kann mir schon vorstellen, dass das wahnsinnig verkompliziert ist - leider habe ich keine andere Lösung gefunden und nur zufällig habe ich festgestellt, dass er die Nummern beim 2. auftauchen nicht aufschreibt (ist aber auch logisch).. Gibt es eine elegantere bzw. erfolgreichere Möglichkeit?

Gruß
Ben