[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Ganesh Babu N wrote:
I think you need to reorganize your grouping code to achieve the output you want. Try whether the following does what you want:
<xsl:output indent="yes"/>
<xsl:template match="articles">
<sections>
<section-title>Contents</section-title>
<xsl:for-each-group select="row" group-by="tokenize(col[2], '\|')[1]">
<xsl:choose>
<xsl:when test="contains(col[2], '|')">
<xsl:variable name="outer-key" select="current-grouping-key()"/>
<xsl:for-each-group select="current-group()" group-by="tokenize(col[2], '\|')[2]">
<section>
<xsl:if test="position() eq 1">
<section-head><xsl:value-of select="$outer-key"/></section-head>
</xsl:if>
<section-subhead><xsl:value-of select="current-grouping-key()"/></section-subhead>
<xsl:apply-templates select="current-group()"/>
</section>
</xsl:for-each-group>
</xsl:when>
<xsl:otherwise>
<section>
<section-head><xsl:value-of select="current-grouping-key()"/></section-head>
<xsl:apply-templates select="current-group()"/>
</section>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</sections>
</xsl:template>
In your original stylesheet you end up with three groups in the outer grouping and then the inner grouping simply has only one group for each of the (last two) groups in the outer grouping.
--
Re: [xsl] position behavior in nested grouping
Subject: Re: [xsl] position behavior in nested grouping From: Martin Honnen <Martin.Honnen@xxxxxx> Date: Wed, 15 Jul 2009 14:50:09 +0200 |
Ganesh Babu N wrote:
I need to find out the starting group or group[1] in the inner loop so that i can append <section-head> to that.
binding a variable in outer loop is giving the group position with respect to outer loop. But I need the position with respect to inner loop.
I think you need to reorganize your grouping code to achieve the output you want. Try whether the following does what you want:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="articles">
<sections>
<section-title>Contents</section-title>
<xsl:for-each-group select="row" group-by="tokenize(col[2], '\|')[1]">
<xsl:choose>
<xsl:when test="contains(col[2], '|')">
<xsl:variable name="outer-key" select="current-grouping-key()"/>
<xsl:for-each-group select="current-group()" group-by="tokenize(col[2], '\|')[2]">
<section>
<xsl:if test="position() eq 1">
<section-head><xsl:value-of select="$outer-key"/></section-head>
</xsl:if>
<section-subhead><xsl:value-of select="current-grouping-key()"/></section-subhead>
<xsl:apply-templates select="current-group()"/>
</section>
</xsl:for-each-group>
</xsl:when>
<xsl:otherwise>
<section>
<section-head><xsl:value-of select="current-grouping-key()"/></section-head>
<xsl:apply-templates select="current-group()"/>
</section>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</sections>
</xsl:template>
<xsl:template match="row"> <para> <page><xsl:value-of select="col[3]"/></page> </para> </xsl:template> </xsl:stylesheet>
In your original stylesheet you end up with three groups in the outer grouping and then the inner grouping simply has only one group for each of the (last two) groups in the outer grouping.
--
Martin Honnen http://msmvps.com/blogs/martin_honnen/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] position behavior in nest, Ganesh Babu N | Thread | Re: [xsl] position behavior in nest, Ganesh Babu N |
Re: [xsl] position behavior in nest, Ganesh Babu N | Date | Re: [xsl] question on support of st, Martin Honnen |
Month |