Если вы имеете дело с группировкой в XSLT 1.0, вам нужно использовать технику под названием « Muenchian Grouping »
В вашем случае одним из способов определения группы является подсчет количества предшествующих Break
элементов
<xsl:key name="groups" match="Tree/*[not(self::Break)]" use="count(preceding-sibling::Break)" />
Затем, чтобы получить каждую группу, вы делаете это
<xsl:for-each select="*[not(self::Break)][generate-id() = generate-id(key('groups', count(preceding-sibling::Break))[1])]">
Если вы отсортируете это по количеству элементов в группе, первый даст вам максимум.
Попробуйте это XSLT ...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="groups" match="Tree/*[not(self::Break)]" use="count(preceding-sibling::Break)" />
<xsl:template match="Tree">
<xsl:for-each select="*[not(self::Break)][generate-id() = generate-id(key('groups', count(preceding-sibling::Break))[1])]">
<xsl:sort select="count(key('groups', count(preceding-sibling::Break)))" order="descending" />
<xsl:if test="position() = 1">
<xsl:value-of select="count(key('groups', count(preceding-sibling::Break)))" />
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>