xsl-list
[Top] [All Lists]

Re: [xsl] position behavior in nested grouping

2009-07-31 00:18:57
Thanks Martin,

It is working like a charm.

Regards,
Ganesh


On Thu, Jul 30, 2009 at 7:12 PM, Martin 
Honnen<Martin(_dot_)Honnen(_at_)gmx(_dot_)de> wrote:
Ganesh Babu N wrote:

all those should be clubbed into single section by taking group-adjcent.

The output should be

                      <sections>
                             <section-title>Contents</section-title>
                         <section>
                              <section-head>Abstracts of the Series
of Fascia Congress - Part
4</section-head>
                              <para>
                                      <page>270</page>
                              </para>
                         </section>
                        <section>
                           <section-head/>
                             <para>
                                      <page>271</page>
                              </para>
                              <para>
                                      <page>271</page>
                              </para>
                         </section>
                         <section>
                              <section-head>Abstracts of the Series
of Fascia Congress - Part
4</section-head>
                              <para>
                                      <page>272</page>
                              </para>
                      </section>
                      <section>
                              <section-head>Prevention &amp;
Rehabilitation</section-head>
                              <section-subhead>Editorial</section-subhead>
                              <para>
                                      <page>273</page>
                              </para>
                              <para>
                                      <page>277</page>
                              </para>
                      </section>
                      <section>
                              <section-subhead>Learning
Methodology</section-subhead>
                              <para>
                                      <page>284</page>
                              </para>
                      </section>
              </sections>

If you know that you want group-adjacent then it is only a slight change
from the earlier stylesheet:

<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-adjacent="if (col[2] = '') then
'' else 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>

The problem why the previous solution skips the row elements with an empty
col[2] child element is that the tokenize function returns an empty sequence
for the empty string and that does not result in a group. But
group-adjacent="if (col[2] = '') then '' else tokenize(col[2], '\|')[1]"
avoids that problem and simply form a group for those elements with an empty
col[2].

--

       Martin Honnen
       http://msmvps.com/blogs/martin_honnen/

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--