Я думаю, что довольно легко справиться с несколькими базовыми периодами. Простой подход заключается в добавлении второго идентификатора для subper_expand
контейнера div (и его якоря), чтобы различать их в отдельных базовых периодах, то есть:
subper_expand{base period position}_{periond position}
BasePeriod:
<xsl:apply-templates select="Period">
<xsl:with-param name="bpPos" select="position()"/>
</xsl:apply-templates>
Период:
<xsl:param name="bpPos"/>
<xsl:variable name="subper">
<xsl:value-of select="concat('subper_expand', $bpPos, '_', position())"/>
</xsl:variable>
<xsl:variable name="subperiod">
<xsl:value-of select="concat('subperiod_expand', $bpPos, '_', position())"/>
</xsl:variable>
...
<a href="javascript:expandIt({$subper}, {$subperiod})"
name="{$subperiod}" class="expandit">Sub Periods</a>
<div id="{$subper}" style="display:none;">
Как вы видите, он выглядит более читабельным при использовании переменных xsl.