The position() function can be used inside xsl:for-each-group.
|
XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> <xsl:template match="/aaa"> <xsl:for-each-group select="*" group-by="@v,@q"> <group-members id="{current-grouping-key()}" pos="{position()}"> <xsl:apply-templates select="current-group()"/> </group-members> </xsl:for-each-group> </xsl:template> <xsl:template match="*"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet> |
|
|
XML
<aaa> <bbb v="v2" q="q0"/> <ccc v="v1" q="q0"/> <ddd v="v1"/> <eee v="v2"/> <fff v="v1" q="q1"/> <ggg v="v3" q="q1"/> </aaa> |
Output
<group-members id="v2" pos="1"> <bbb v="v2" q="q0"/> <eee v="v2"/> </group-members> <group-members id="q0" pos="2"> <bbb v="v2" q="q0"/> <ccc v="v1" q="q0"/> </group-members> <group-members id="v1" pos="3"> <ccc v="v1" q="q0"/> <ddd v="v1"/> <fff v="v1" q="q1"/> </group-members> <group-members id="q1" pos="4"> <fff v="v1" q="q1"/> <ggg v="v3" q="q1"/> </group-members> <group-members id="v3" pos="5"> <ggg v="v3" q="q1"/> </group-members> |
| Previous chapter: | Elements and attributes |
| Next chapter: | Multiple source documents |
| Previous page: | Groups generated with group-by using several key values |
| Next page: | Sorting of groups |