xsl-list
[Top] [All Lists]

Re: [xsl] two-level grouping

2008-03-06 08:21:53
Terry Ofner wrote:
I am stuck on a two-level grouping problem. This one is slightly different from the last one. I believe it involves nested grouping sequences, but I have been wrong on numerous occasions before.

Here is a solution, using the same approach as in my last suggestion on your earlier grouping problem:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  version="2.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:strip-space elements="*"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="bodymatter">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:for-each-group
        select="*"
        group-starting-with="chapter">
          <level1>
            <xsl:for-each-group
              select="current-group()"
              group-starting-with="a-head">
                <xsl:choose>
                  <xsl:when test="current-group()[1][self::a-head]">
                    <level2>
                      <xsl:apply-templates select="current-group()"/>
                    </level2>
                  </xsl:when>
                  <xsl:otherwise>
                    <xsl:apply-templates select="current-group()"/>
                  </xsl:otherwise>
                </xsl:choose>
            </xsl:for-each-group>
          </level1>
      </xsl:for-each-group>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>


I think that gives you the grouping you want.

--

        Martin Honnen
        http://JavaScript.FAQTs.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>
--~--

<Prev in Thread] Current Thread [Next in Thread>