Re: [xsl] Using xsl:for-each-group to create nested sections

Subject: Re: [xsl] Using xsl:for-each-group to create nested sections
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Fri, 9 Jul 2004 22:14:33 +0100
Hi Renee,

> How can I get the stylesheet to wrap the nested section tags only
> around the content beginning with the first <h2> and not around the
> elements that come before the first <h2>?

Add a test to see whether the current node (which is the first node in
a particular group) is an <h2> element or not; if it is, then create
the <section> element; if it isn't, then don't:

<xsl:template match="doc">
  <doc>
    <xsl:for-each-group select="*" group-starting-with="h1">
      <section>
        <xsl:apply-templates select="current-group()[self::h1]" />
        <xsl:for-each-group select="current-group() except ."
                            group-starting-with="h2">
          <xsl:choose>
            <xsl:when test="self::h2">
              <section>
                <xsl:apply-templates
                  select="current-group()[self::*]" />
              </section>
            </xsl:when>
            <xsl:otherwise>
              <xsl:apply-templates
                select="current-group()[self::*]" />
            </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each-group>
      </section>
    </xsl:for-each-group>
  </doc>
</xsl:template>

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Current Thread