xsl:iterate
The xsl:iterate instruction is new in XSLT 3.0. It is similar to xsl:for-each,
         except that the items in the input sequence are processed sequentially, and after processing each item
         in the input sequence it is possible to set parameters for use in the next iteration. It can therefore
         be used to solve problems that in XSLT 2.0 require recursive functions or templates.
The xsl:iterate instruction is motivated by use-cases for streaming, but it can also
         be used profitably in non-streaming situations.
Here is an example that computes the running balance of a sequence of financial transactions:
<xsl:iterate select="transactions/transaction"> <xsl:param name="balance" select="0.00" as="xs:decimal"/> <xsl:variable name="newBalance" select="$balance + xs:decimal(@value)"/> <balance date="{@date}" value="{$newBalance}"/> <xsl:next-iteration> <xsl:with-param name="balance" select="$newBalance"/> </xsl:next-iteration> </xsl:iterate>As well as xsl:next-iteration, the instruction allows a child element xsl:break
         which causes premature completion before the entire input sequence has been processed, and a child element
         xsl:on-completion which defines processing to be carried out when the input sequence is exhausted. 
               The instructions within xsl:on-completion
         have access to the final values of the parameters declared in the xsl:next-iteration instruction
         set while processing the last item in the sequence.
Here is an example that copies the input sequence up to the first br element:
Earlier Saxon releases implemented a prototype of xsl:iterate as an extension in the Saxon
         namespace (saxon:iterate). This is dropped in Saxon 9.5.