David, sibling recursion over the foo elements...
<xsl:template match="b">
<zzz>
<xsl:apply-templates select="*[1]/self::foo"/>
</zzz>
</xsl:template>
<xsl:template match="foo">
<xsl:copy-of select="."/>
<xsl:apply-templates select="following-sibling::*[1]/self::foo"/>
</xsl:template>
Cheers
Leo
On 18 Feb 2021, at 22:35, David Carlisle
d(_dot_)p(_dot_)carlisle(_at_)gmail(_dot_)com
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
Given
<x>
<b>
<foo>1</foo>
<foo>2</foo>
<bar>x</bar>
<foo>3</foo>
</b>
<b>
<foo>4</foo>
<foo>5</foo>
<foo>6</foo>
</b>
<b>
<bar>y</bar>
<foo>7</foo>
<foo>8</foo>
</b>
</x>
this stylesheet
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform
<http://www.w3.org/1999/XSL/Transform>">
<xsl:template match="b">
<zzz>
<xsl:apply-templates mode="onlyfoo" select="*[1]"/>
</zzz>
</xsl:template>
<xsl:template mode="onlyfoo" match="*"/>
<xsl:template mode="onlyfoo" match="foo">
<xsl:copy-of select="."/>
<xsl:apply-templates mode="onlyfoo" select="following-sibling::*[1]"/>
</xsl:template>
</xsl:stylesheet>
produces
<zzz><foo>1</foo><foo>2</foo></zzz>
<zzz><foo>4</foo><foo>5</foo><foo>6</foo></zzz>
<zzz/>
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--