jens: XSLT-Sortierung / Zusammenfasssung nach Elementnamen

Beitrag lesen

Hallo Thomas,

Sprich: Unter dem Kunden sollen die einzelnen Positionen aufgelistet werden. Das XML ist für diesen Fall gänzlich bescheuert aufgebaut, kann aber NICHT geändert werden - sprich ich brauche eine XSLT-Lösung um die Daten entsprechend zu sortieren und zusammenzufassen.

Weiss jemand Rat?

Ich habe in den letzen zwei wochen einige solche Fragen beantwortet. Was du möchtest ist ene Gruppierung auf Grund von Elementwerten, dazu kannst du einen key verwenden (xsl:key und key() ).
Beispile und Lösungen findest du alle im Archiv (eine Suche nach meinem Namen und xsl:key sollte die entsprechenden Beiträge auflisten) . Siehe sie dir bitte an und wenn du dann noch Fragen hast, stelle sie in diesem Thread.

ich bin gut voran gekommen. Jetzt habe ich allerdings noch ein Problem:

Mein bisheriger Quellcode:

<xsl:key name="folgenr" match="Table" use="folgenr"/>
<xsl:key name="zuordnung" match="Table" use="zuordnung"/>
<xsl:template match="/">
<table class="h1" border="0">
<tr><td></td><td></td>

<xsl:for-each select="//Table[generate-id(.) = generate-id(key('folgenr',folgenr))]">
<td><xsl:value-of select="artikelgruppe"/><br/><xsl:value-of select="artikel"/></td>
<xsl:for-each select="key('folgenr', folgenr)">
</xsl:for-each>
</xsl:for-each>
</tr>
<xsl:for-each select="//Table[generate-id(.) = generate-id(key('zuordnung',zuordnung))]">
<tr>
<td><xsl:value-of select="./zuordnung"/></td>
<td><xsl:value-of select="./faktor"/></td>
<xsl:for-each select="key('zuordnung', zuordnung)">
<td align="right">
<table class="h1"><tr><td><xsl:value-of select="./anzahl"/></td><td><p align="right"><xsl:value-of select="./menge"/></p></td></tr></table></td>
</xsl:for-each>
</tr>
</xsl:for-each>
<tr><td>Gesamtsumme:</td><td></td>
<xsl:for-each select="//Table[generate-id(.) = generate-id(key('folgenr',folgenr))]">
<xsl:for-each select="key('folgenr', folgenr)">
<xsl:if test="position() = last()"><td align="right"><xsl:value-of select="gesamtmenge"/></td></xsl:if>
</xsl:for-each>
</xsl:for-each>
</tr>
</table>
</xsl:template>

Das ganze erstellt eine Tabelle, welche eine Bestellliste ist. Oben stehen die Artikelgruppen- und Artikelbezeichnungen, auf der linken Seite stehen die Stellen, denen diese Artikel zugeordnet werden. Hauptbestandteil der Tabelle sind die Bestellfaktoren und die Bestellmenge (z.B. 90 x 2 = 180).

Meine Frage: Wie könnte ich nun nach z.B. 10 Artikeln eine neue Tabelle anfangen, welche wieder 10 Artikel fast? Diese Bestelllisten sind ca. 100 Artikel in einer Reihe (bisher in Excel-Arbeitsblätter unterbegracht), was das ganze dann unübersichtlich macht...

VIELEN DANK für deine immer wieder gute Hilfe und deine Ratschläge.

Gruß,

Jens.