я так делал
<xsl:template match="/document">
<ul>
<xsl:apply-templates select="structure[show=1]" mode="main" />
</ul>
</xsl:template>
<xsl:template match="structure" mode="main">
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<li>
<a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
<ul class="sub"><xsl:apply-templates select="structure[show=1]" mode="sub" /></ul>
</li>
</xsl:template>
<xsl:template match="structure" mode="sub">
<li>
<a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</li>
</xsl:template>
(суть)
то есть в выводе группы вызываем еще раз похожий шаблон (можно и самого себя вызвать, тогда вся структура выйдет)