The following conversion creates the desired result :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vN" select="3"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates
select="line[position() mod $vN = 1]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="line">
<set>
<xsl:apply-templates mode="copy" select=
".
|
following-sibling::line[position() < $vN]"/>
</set>
</xsl:template>
<xsl:template match="line" mode="copy">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
When applied to the provided XML document :
<Header>
<line>Line 1</line>
<line>Line 2</line>
<line>Line 3</line>
<line>Line 4</line>
<line>Line 5</line>
<line>Line 6</line>
<line>Line 7</line>
<line>Line 8</line>
<line>Line 9</line>
</Header>
result :
<Header>
<set>
<line>Line 1</line>
<line>Line 2</line>
<line>Line 3</line>
</set>
<set>
<line>Line 4</line>
<line>Line 5</line>
<line>Line 6</line>
</set>
<set>
<line>Line 7</line>
<line>Line 8</line>
<line>Line 9</line>
</set>
</Header>
Please note the following :