Something which might work for you in this particular instance would be 
to replace
<xsl:template match="B" mode="id1">
   whatever
   <xsl:apply-templates select="self::B" mode="table"/>
</xsl:template>
<xsl:template match="B" mode="table">
   table
</xsl:template>
with
<xsl:template match="B[(_at_)ID='id1']">
  whatever
  <xsl:call-template name="b-table"/>
</xsl:template>
<xsl:template match="B" name="b-table">
  table
</xsl:template>
Niko Matsakis
--
DataPower technology
http://www.datapower.com
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list