Re: [xsl] Terminate <xsl:for-each>

Subject: Re: [xsl] Terminate <xsl:for-each>
From: "Joris Gillis" <roac@xxxxxxxxxx>
Date: Sat, 03 Sep 2005 11:57:40 +0200
Tempore 21:30:44, die 09/02/2005 AD, hinc in xsl-list@xxxxxxxxxxxxxxxxxxxxxx scripsit aaron apigo <aaronjose_apigo2001@xxxxxxxxx>:

  Using my logic in my sytlesheets, all the
<text:user-field-get> are captured, is there a
possibility that when <for-each> select
<text:bookmark-end text:name="___"/>, <for-each> will
automatically be terminated, and the next
<text:bookmark-start text:name="___"/> will be the one
to process.

No, a 'for-each' loop cannot be terminated in XSLT. You will have to alter your algorithm.

To get some inspiration, you might take a look at this working code snippet:

<xsl:key name="bookmark" match="*"
		 = following::text:bookmark-end[1]/@text:name]

<xsl:template match="text:root">
		<xsl:apply-templates select=".//text:bookmark-start"/>

<xsl:template match="text:bookmark-start">
	<xsl:element name="{@text:name}">
		<xsl:for-each select="key('bookmark',@text:name)[self::text:user-field-get]">
			<tag><xsl:value-of select="."/></tag>

The 'bookmark' key will return each node, that sits between a 'text:bookmark-start' and a 'text:bookmark-end', by the bookmark's name. It then suffices to filter these nodes with the [self::text:user-field-get] predicate to get only the 'text:user-field-get' elements.

Joris Gillis (
Veni, vidi, wiki (

Current Thread