[xsl] multi-level grouping on attributes

Subject: [xsl] multi-level grouping on attributes
From: "Klocker Christoph" <Christoph.Klocker@xxxxxxxxxxxxx>
Date: Thu, 6 Oct 2005 13:49:40 +0200
Hi

I try to achieve a multilevel grouping on attributes:
I got several items like these

<SI>
<eintrag pos="181" paragraph="3">aa</eintrag>
<eintrag pos="182" paragraph="3" absatz="1">aa</eintrag>
<eintrag pos="183" paragraph="3" absatz="1">bb</eintrag>
<eintrag pos="184" paragraph="3" absatz="2" a_litera="a" >aa</eintrag>
<eintrag pos="185" paragraph="3" absatz="2" a_litera="a"
ziffer="15">aa</eintrag>
<eintrag pos="186" paragraph="3" absatz="2" a_litera="a"
ziffer="15">bb</eintrag>
<eintrag pos="187" paragraph="3" absatz="2" ziffer="16">aa</eintrag>
<eintrag pos="188" paragraph="5" absatz="5">aa</eintrag>
<eintrag pos="189" paragraph="5" absatz="5" a_litera="a">aa</eintrag>
</SI>

Result should be:
<SI>
 <document>
    <eintrag pos="180" paragraph="3">aa</eintrag>
    <eintrag pos="181" paragraph="3">bb</eintrag>
 </document>
 <document>
   <eintrag pos="182" paragraph="3" absatz="1">aa</eintrag>
   <eintrag pos="183" paragraph="3" absatz="1">bb</eintrag>
 </document>
 <document>
    <eintrag pos="184" paragraph="3" absatz="2">aa</eintrag>
 </document>
<document>
    <eintrag pos="185" paragraph="3" absatz="2" a_litera="a"
ziffer="15">aa</eintrag>
    <eintrag pos="186" paragraph="3" absatz="2" a_litera="a"
ziffer="15">bb</eintrag>
</document>
</SI>

I started with:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xs="http://www.w3.org/2001/XMLSchema"; >
	<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes"/>

<xsl:template match="/">
<SI>
	<xsl:for-each-group select="//eintrag" group-by="@paragraph">
	  <xsl:choose>
				<xsl:when
test="current-group()/@absatz">
					<xsl:for-each-group
select="current-group()" group-by="@absatz">
						<document>
						<xsl:copy-of
select="current-group()" copy-namespaces="no"/>
					</document>
					</xsl:for-each-group>
				</xsl:when>
				<xsl:otherwise>
					<document>
						<xsl:copy-of
select="current-group()" copy-namespaces="no"/>
					</document>
				</xsl:otherwise>
		</xsl:choose>
	</xsl:for-each-group>
</SI>
</xsl:template>
</xsl:stylesheet>

The problem is, I loose the <entry> which has no @absatz.
What is the right <xsl:choose> to achieve the required result.

Thx
Christoph

Current Thread