If you input is as follows:
<foo>
<bar id="bar-1">
<barfoo id="barfoo-1"/>
</bar>
<bar id="bar-2">
<barfoo id="barfoo-2"/>
</bar>
<bar id="bar-3">
<barfoo id="barfoo-3"/>
</bar>
</foo>
And all you want to do is wrap all the <bar> elements in a single
<container> elements, you can use:
<xsl:template match="foo">
<foo>
<container>
<xsl:copy-of select="bar"/>
</container>
</foo>
</xsl:template>
Note, you can create 'literal result elements' such as <container> by
writing them directly without using <xsl:element name="container">.
If your input is a little more complated, for example:
<foo>
<apple/>
<orange/>
<apple/>
<pear/>
<apple/>
<foo>
An you would like to wrap all <apple>'s in a <container>, then process
any other elements you can use:
<xsl:template match="foo">
<foo>
<container>
<xsl:copy-of select="apple"/>
</container>
<xsl:apply-templates select="*[not(self::apple)]"/>
</foo>
</xsl:template>
You won't need to use modes here,
cheers
andrew