A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
Die Instruktion xsl:for-each-group dient dazu eine im select-Attribut angegebene Eingabesequenz anhand eines Kriteriums zu gruppieren. Hierbei werden alle Items denen der gleiche Wert für das ausgewählte Kriterium zugeordnet wird, zu einer Gruppe zusammengefasst. Das Kriterium wird mittels des group-by- oder group-adjacent-Attributs angegeben. Hierbei wird ein relativer Ausdruck angegeben, der auf jedes Item der Eingabesequenz angewandt wird. Dabei wird das Item als jeweiliges Kontextitem betrachtet und der ermittelte Wert diesem zugeordnet.
Der Unterschied zwischen group-by und group-adjacent ist, dass bei group-by alle Knotenitems, die den gleichen Wert haben, einer Gruppe zugeordnet werden, während bei group-adjacent nur alle aufeinanderfolgenden gleichen Werte einer Gruppe zugeordnet werden. Die Reihenfolge ist die gleiche wie in der Eingabesequenz, kann jedoch mit der xsl:sort-Instruktion entsprechend verändert werden.
Alternativ zu group-by und group-adjacent kann die Eingabesequenz durch die Attribute group-starting-with und group-ending-with gruppiert werden. Hierbei werden alle Elemente die nach einem bei group-starting-with angegebenen Knotens (inklusive diesem) und vor dem nächsten gleichen Knoten stehen einer Gruppe zugeordnet werden.
Der Inhalt des xsl:for-each-group-Elements wird für jede Gruppe angewandt. Die Gruppe wird dabei als Teilsequenz ausgegeben. Abgerufen werden kann sie durch die XPath-Funktion current-group().
Kindelemente
xsl:sort MMP, 20090708Attribute
select, group-by, group-adjacent, group-starting-with, group-ending-with, collation<?xml version="1.0"encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="root"> <html> <head> <title>for-each</title> </head> <body> <p> <xsl:for-each-group select="stadt" group-by="@land"> <group> <key> <xsl:value-of select="current-grouping-key()"> </xsl:value-of> <key> <xsl:for-each select="current-group()"> <stadt> <xsl:value-of select="name"></xsl:value-of> </stadt> </xsl:for-each> </group> </xsl:for-each-group> </p> </body> </html> </xsl:template> </xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?> <root> <stadt land="de"> <name>Berlin</name> <einwohner>3420786</einwohner> <fläche>891.85</fläche> <gemeinde>11000000</gemeinde> <bewertung>5</bewertung> </stadt> <stadt land="de"> <name>Hamburg</name> <einwohner>1773218</einwohner> <fläche>755.264</fläche> <gemeinde>02000000</gemeinde> <bewertung>4</bewertung> </stadt> <stadt land="fr"> <name>Paris</name> <einwohner>2166200</einwohner> <fläche>105.40</fläche> <bewertung>3</bewertung> </stadt> <stadt land="de"> <name>Ludwigshafen</name> <einwohner>163777</einwohner> <fläche>77.68</fläche> <bewertung>-3</bewertung> </stadt> </root>
<?xml version="1.0"encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="root"> <verzeichnis> <xsl:for-each-group select="stadt" group-by="@land"> <group> <key> <xsl:value-of select="current-grouping-key()"></xsl:value-of> </key> <xsl:for-each select="current-group()"> <stadt> <xsl:value-of select="name"></xsl:value-of> </stadt> </xsl:for-each> </group> </xsl:for-each-group> </verzeichnis> </xsl:template> </xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?> <verzeichnis> <group> <key>de</key> <stadt>Berlin</stadt> <stadt>Hamburg</stadt> <stadt>Ludwigshafen</stadt> </group> <group> <key>fr</key> <stadt>Paris</stadt> </group> </verzeichnis>
<?xml version="1.0"encoding="UTF-8"?> <root> <stadt land="de"> <name>Berlin</name> <einwohner>3420786</einwohner> <fläche>891.85</fläche> <gemeinde>11000000</gemeinde> <bewertung>5</bewertung> </stadt> <stadt land="de"> <name>Hamburg</name> <einwohner>1773218</einwohner> <fläche>755.264</fläche> <gemeinde>02000000</gemeinde> <bewertung>4</bewertung> </stadt> <stadt land="fr"> <name>Paris</name> <einwohner>2166200</einwohner> <fläche>105.40</fläche> <bewertung>3</bewertung> </stadt> <stadt land="de"> <name>Ludwigshafen</name> <einwohner>163777</einwohner> <fläche>77.68</fläche> <bewertung>-3</bewertung> </stadt> </root>
<?xml version="1.0"encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="root"> <verzeichnis> <xsl:for-each-group select="stadt" group-adjacent="@land"> <group> <key> <xsl:value-of select="current-grouping-key()"></xsl:value-of> </key> <xsl:for-each select="current-group()"> <stadt> <xsl:value-of select="name"></xsl:value-of> </stadt> </xsl:for-each> </group> </xsl:for-each-group> </verzeichnis> </xsl:template> </xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?> <verzeichnis> <group> <key>de</key> <stadt>Berlin</stadt> <stadt>Hamburg</stadt> </group> <group> <key>fr</key> <stadt>Paris</stadt> </group> <group> <key>de</key> <stadt>Ludwigshafen</stadt> </group> </verzeichnis>
<?xml version="1.0"encoding="UTF-8"?> <root> <stadt land="de"> <name>Berlin</name> <einwohner>3420786</einwohner> <fläche>891.85</fläche> <gemeinde>11000000</gemeinde> <bewertung>5</bewertung> </stadt> <stadt land="de"> <name>Hamburg</name> <einwohner>1773218</einwohner> <fläche>755.264</fläche> <gemeinde>02000000</gemeinde> <bewertung>4</bewertung> </stadt> <stadt land="fr"> <name>Paris</name> <einwohner>2166200</einwohner> <fläche>105.40</fläche> <bewertung>3</bewertung> </stadt> <stadt land="de"> <name>Ludwigshafen</name> <einwohner>163777</einwohner> <fläche>77.68</fläche> <bewertung>-3</bewertung> </stadt> </root>
<?xml version="1.0"encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="root"> <verzeichnis> <block> <xsl:for-each-group select="stadt" group-adjacent="@land"> <xsl:sort select="current-grouping-key()"></xsl:sort> <group> <key> <xsl:value-of select="current-grouping-key()"> </xsl:value-of> </key> <xsl:for-each select="current-group()"> <stadt> <xsl:value-of select="name"></xsl:value-of> </stadt> </xsl:for-each> </group> </xsl:for-each-group> </block> <block> <xsl:for-each-group select="stadt" group-by="@land"> <xsl:sort select="sum(current-group()/einwohner)"></xsl:sort> <group> <key> <xsl:value-of select="current-grouping-key()"> </xsl:value-of> </key> <xsl:for-each select="current-group()"> <stadt> <xsl:value-of select="name"></xsl:value-of> </stadt> </xsl:for-each> </group> </xsl:for-each-group> </block> </verzeichnis> </xsl:template> </xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?> <verzeichnis> <block> <group> <key>de</key> <stadt>Berlin</stadt> <stadt>Hamburg</stadt> </group> <group> <key>de</key> <stadt>Ludwigshafen</stadt> </group> <group> <key>fr</key> <stadt>Paris</stadt> </group> </block> <block> <group> <key>fr</key> <stadt>Paris</stadt> </group> <group> <key>de</key> <stadt>Berlin</stadt> <stadt>Hamburg</stadt> <stadt>Ludwigshafen</stadt> </group> </block> </verzeichnis>
<?xml version="1.0"encoding="UTF-8"?> <buch> <title>Title 1</title> <para> Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, fand er sich in seinem Bett zu einem ungeheueren Ungeziefer verwandelt. </para> <para> Er lag auf seinem panzerartig harten Rücken und sah, wenn er den Kopf ein wenig hob, seinen gewölbten, braunen, von bogenförmigen Versteifungen geteilten Bauch, auf dessen Höhe sich die Bettdecke, zum gänzlichen Niedergleiten bereit, kaum noch erhalten konnte. </para> <para> Seine vielen, im Vergleich zu seinem sonstigen Umfang kläglich dünnen Beine flimmerten ihm hilflos vor den Augen. </para> <title>Title 2</title> <para> »Was ist mit mir geschehen?«, dachte er. Es war kein Traum. </para> <para> Sein Zimmer, ein richtiges, nur etwas zu kleines Menschenzimmer, lag ruhig zwischen den vier wohlbekannten Wänden. </para> <para> Über dem Tisch, auf dem eine auseinandergepackte Musterkollektion von Tuchwaren ausgebreitet war - Samsa war Reisender - hing das Bild, das er vor kurzem aus einer illustrierten Zeitschrift ausgeschnitten und in einem hübschen, vergoldeten Rahmen untergebracht hatte. </para> <para> Es stellte eine Dame dar, die mit einem Pelzhut und einer Pelzboa versehen, aufrecht dasaß und einen schweren Pelzmuff, in dem ihr ganzer Unterarm verschwunden war, dem Beschauer entgegenhob. </para> <title>Title 3</title> <para> Gregors Blick richtete sich dann zum Fenster, und das trübe Wetter - man hörte Regentropfen auf das Fensterblech aufschlagen - machte ihn ganz melancholisch. »Wie wäre es, wenn ich noch ein wenig weiterschliefe und alle Narrheiten vergäße«, dachte er, aber das war gänzlich undurchführbar, denn er war gewöhnt, auf der rechten Seite zu schlafen, konnte sich aber in seinem gegenwärtigen Zustand nicht in diese Lage bringen. </para> </buch>
<?xml version="1.0"encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="buch"> <article> <xsl:for-each-group select="./*" group-starting-with="title"> <section> <xsl:copy-of select="current-group()"></xsl:copy-of> </section> </xsl:for-each-group> </article> </xsl:template> </xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?> <article> <section> <title>Title 1</title> <para> Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, fand er sich in seinem Bett zu einem ungeheueren Ungeziefer verwandelt. </para> <para> Er lag auf seinem panzerartig harten Rücken und sah, wenn er den Kopf ein wenig hob, seinen gewölbten, braunen, von bogenförmigen Versteifungen geteilten Bauch, auf dessen Höhe sich die Bettdecke, zum gänzlichen Niedergleiten bereit, kaum noch erhalten konnte. </para> <para> Seine vielen, im Vergleich zu seinem sonstigen Umfang kläglich dünnen Beine flimmerten ihm hilflos vor den Augen. </para> </section> <section> <title>Title 2</title> <para> »Was ist mit mir geschehen?«, dachte er. Es war kein Traum. </para> <para> Sein Zimmer, ein richtiges, nur etwas zu kleines Menschenzimmer, lag ruhig zwischen den vier wohlbekannten Wänden. </para> <para> Über dem Tisch, auf dem eine auseinandergepackte Musterkollektion von Tuchwaren ausgebreitet war - Samsa war Reisender - hing das Bild, das er vor kurzem aus einer illustrierten Zeitschrift ausgeschnitten und in einem hübschen, vergoldeten Rahmen untergebracht hatte. </para> <para> Es stellte eine Dame dar, die mit einem Pelzhut und einer Pelzboa versehen, aufrecht dasaß und einen schweren Pelzmuff, in dem ihr ganzer Unterarm verschwunden war, dem Beschauer entgegenhob. </para> </section> <section> <title>Title 3</title> <para> Gregors Blick richtete sich dann zum Fenster, und das trübe Wetter - man hörte Regentropfen auf das Fensterblech aufschlagen - machte ihn ganz melancholisch. »Wie wäre es, wenn ich noch ein wenig weiterschliefe und alle Narrheiten vergäße«, dachte er, aber das war gänzlich undurchführbar, denn er war gewöhnt, auf der rechten Seite zu schlafen, konnte sich aber in seinem gegenwärtigen Zustand nicht in diese Lage bringen. </para> </section> </article>
| > nach oben | |
| > zurück zur alphabetischen Liste der XSLT Elemente |