Hallo,
ich muss seit langem mal wieder auf xslt1.0 zurueckgreifen, da für das projekt nicht xslt2.0 verfügbar ist. nun habe ich ein gruppierungsproblem, zum einen unterschlägt es mir einige knotenausgaben und zum anderen suche ich nach einer möglichkeit kombinationen aus zahl und nachfolgender zahl zu sortieren, z.B. liegen mir die hausnummern als 100, 1, oder 10A bzw. 100A, 200, 20b. Diese muesste ich sortieren koenen nach Hausnummer und dann der Zusatz (1,10A,100,100A .....)
Du musst immer dafür sorgen, dass der key für die nächste Untergruppe die elemente aus der Obergruppe berücksichtigt.
(Du kannst auf die '+' im concat() auch verzeichten und die Sortierung bei translate(., 'ABCD...', '') muss du ergänzen).
<xsl:key name="refName" match="element" use="name"/>
<xsl:key name="refHausnummer" match="element" use="concat(name, '+', hausnummer)"/>
<xsl:key name="refType" match="element" use="concat(name, '+', hausnummer, '+', typ)"/>
<xsl:key name="refSubtype" match="element" use="concat(name, '+', hausnummer, '+', typ, '+', Subtype)"/>
<xsl:template match="/root">
<xsl:for-each select="element[generate-id() = generate-id(key('refName', name)[1])]">
<xsl:sort select="name" case-order="lower-first" data-type="text"/>
<xsl:value-of select="concat('Name: ',name)"/><br />
<xsl:for-each select="key('refName',name)[generate-id() = generate-id(key('refHausnummer', concat(name, '+', hausnummer))[1])]">
<xsl:sort data-type="number" select="translate(hausnummer, 'ABCDEF', '')"/>
<xsl:sort data-type="text" select="translate(hausnummer, '1234567890', '')"/>
 <xsl:value-of select="concat('Hausnummer: ',hausnummer) "/><br />
<xsl:for-each select="key('refHausnummer', concat(name, '+', hausnummer))[generate-id() = generate-id(key('refType', concat(name, '+', hausnummer, '+', typ))[1])]">
   <xsl:value-of select="concat('Type: ', typ) "/><br />
<xsl:for-each select="key('refType', concat(name, '+', hausnummer, '+', typ))[generate-id() = generate-id(key('refSubtype', concat(name, '+', hausnummer, '+', typ, '+', Subtype))[1])]">
     <xsl:value-of select="concat('Subtype: ',Subtype)"/><br />
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
<br />
</xsl:for-each>
</xsl:template>
ErRgibt so etwas:
Name: Dieter
Hausnummer: 10A
Type: A
Subtype: B
Hausnummer: 10B
Type: A
Subtype: B
Name: Hans
Hausnummer: 10
Type: C
Subtype: B
Type: D
Subtype: B
Hausnummer: 10A
Type: A
Subtype: B
Hausnummer: 20
Type: D
Subtype: B
Hausnummer: 100
Type: D
Subtype: B
Grüße
Thomas