Thomas J.S.: Nodes über ein Attribut zusammenfassen

Beitrag lesen

Hallo,

so, jetzt hast Du mich ganz schön ins schwitzen gebracht;)

;-)

Aber immerhin habe ich jetzt eine Lösung erarbeitet,

Darum ging's ja ;-)

frage mich aber, ob's nicht vielleicht einfacher ginge bzw. ob das so der richtige Weg ist.

Das Problem ist, dass du eine zweite Gruppierung brauchen würdest, aber für diese zweite Gruppierung kein wirklicher vergelichbasis gibt, denn
wenn du die Reihenfolge Titel, Verlag, ISBN so erhalten willst, muss du es mehr oder weniger so machen wie du es schon gemacht hast.
Einfacher ginge es natürlich so:
<xsl:template match="book">
 <xsl:variable name="myvar" select="key('mykey', @parentid)"/>
 <xsl:if test="generate-id(.) = generate-id(key('mykey', @parentid)[1])">
 <tr>
  <xsl:for-each select="$myvar">
   <td><xsl:value-of select="@wert"/></td>
  </xsl:for-each>
 </tr>
 </xsl:if>
</xsl:template>

Aber wie gesagt, für die zweite Sortierung, kannst da du wenig in XSL tun, denn weder die Sortierung des @attr-Attributs nach ABC, oder nach 'string-length' bringt die Reihenfolge: Titel, Verlag, ISBN.

Je nachdem ob du Einflß auf das XML hast, kannst du dies dort berücksichtigen (z.B. dann die Ausgabe der Elemente immer in der Reihenfolge attr="titel", attr="verlag", attr="isbn" geschieht).

Grüße
Thomas