Re: [xsl] Grouping

Subject: Re: [xsl] Grouping
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 21 Oct 2020 16:05:46 -0000
Am 21.10.2020 um 17:57 schrieb Christoph Naber pentium120mhz@xxxxxxxxx:

The group-wrap should be performed for sequences of <points> of @type =
'1'. <Points> of other types and completeley other nodes should not be
grouped.

The "group-adjacent" solution seemes obvious but I have to account for
various parent elements that all have different templates. Wouldn't
using the group-adj. solution mean that I have to edit each and every
template that can possibly contain <points>?

I did not notice the requirement of different parent templates so I was thinking in doing

  <xsl:template match="*[point/@type = 1]">
      <xsl:copy>
          <xsl:for-each-group select="*"
group-adjacent="boolean(self::point[@type = 1])">
              <xsl:choose>
                  <xsl:when test="current-grouping-key()">
                      <group>
                          <xsl:apply-templates select="current-group()"/>
                      </group>
                  </xsl:when>
                  <xsl:otherwise>
                      <xsl:apply-templates select="current-group()"/>
                  </xsl:otherwise>
              </xsl:choose>
          </xsl:for-each-group>
      </xsl:copy>
  </xsl:template>


It is certainly possible to put the grouping code into a function to use it in different templates, hard to tell whether that will work with the various parent elements having different templates without seeing how these templates look.

Current Thread