<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:output method="text" indent="no" encoding="UTF-8" />	
	<xsl:variable name="manyElements" select="document('many_elements.xml')/root/a" />
	<xsl:variable name="number" select="1000000" />
	<xsl:variable name="maxStack" select="100" />
	
	<xsl:template match="/">				
		<xsl:call-template name="for" />
	</xsl:template>

	<xsl:template name="for">
		<xsl:for-each select="$manyElements[position() &lt;= floor($number div $maxStack)]">
			<xsl:choose>
				<xsl:when test="position() = 1">
					<xsl:call-template name="inner-for">
						<xsl:with-param name="num" select="2"/>
						<xsl:with-param name="pos" select="position()"/>
					</xsl:call-template>
				</xsl:when>
				<xsl:otherwise>
					<xsl:call-template name="inner-for">
						<xsl:with-param name="pos" select="position()"/>
					</xsl:call-template>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:for-each>
	</xsl:template>
	
	<xsl:template name="inner-for">
		<xsl:param name="num" select="0"/>	
		<xsl:param name="pos"/>	
		<xsl:if test="$num &lt;= $maxStack">
			<xsl:if test="not($num mod 2)">
				<xsl:value-of select="($pos - 1) * $maxStack + $num" />, 
			</xsl:if>
			<xsl:call-template name="inner-for">
				<xsl:with-param name="num" select="$num + 2"/>
				<xsl:with-param name="pos" select="$pos"/>
			</xsl:call-template>
		</xsl:if>
	</xsl:template>
	
</xsl:stylesheet>
