Разбейте ваш XSL на несколько шаблонов
Рекомендуется использовать множество шаблонов, а не шаблон со "скрытыми" <xsl:for-each>
элементами.
BasePeriod:
<xsl:template match="SvcPeriods/BasePeriod">
<tr>
<td>
<xsl:value-of select="startDate"/>
</td>
<td>
<xsl:value-of select="endDate"/>
</td>
<td>
<a href="javascript:expandIt(per_expand{position()},
per_expand{position()})"
name="period_expand{position()}" class="expandit">Periods</a>
<div id="per_expand{position()}" style="display:none;">
<table>
<tr>
<th> Start Date </th>
<th> End Date </th>
<th> Sub Periods </th>
<th> Type </th>
</tr>
<xsl:apply-templates select="Period"/>
</table>
</div>
</td>
</tr>
<xsl:call-template name="expandIt"/>
</xsl:template>
Период:
<xsl:template match="Period">
<tr>
<td>
<xsl:value-of select="start"/>
</td>
<td>
<xsl:value-of select="end"/>
</td>
<td>
<a href="javascript:expandIt(subper_expand{position()},
subperiod_expand{position()})"
name="subperiod_expand{position()}"
class="expandit">Sub Periods</a>
<div id="subper_expand{position()}" style="display:none;">
<table>
<tr>
<th> Start Date </th>
<th> End Date </th>
</tr>
<xsl:apply-templates select="subperiod"/>
</table>
</div>
</td>
<td>
<xsl:value-of select="type"/>
</td>
</tr>
</xsl:template>
подпериод:
<xsl:template match="subperiod">
<tr>
<td>
<xsl:value-of select="substart"/>
</td>
<td>
<xsl:value-of select="subend"/>
</td>
</tr>
</xsl:template>
expandIt:
<xsl:template name="expandIt">
<script language="JavaScript">
function expandIt(whichEl, link) {
whichEl.style.display = (whichEl.style.display == "none" ) ? "" : "none";
if ( link ) {
if ( link.innerHTML ) {
if ( whichEl.style.display == "none" ) {
link.innerHTML = "[+] " + link.innerHTML.substring( 4 );
} else {
link.innerHTML = "[-] " + link.innerHTML.substring( 4 );
}
}
}
}
</script>
</xsl:template>
Как видите, я изменил:
<a href="javascript:expandIt(subper_expand{position()}),
subperiod_expand{position()}"
на:
<a href="javascript:expandIt(subper_expand{position()},
subperiod_expand{position()})"
(то же самое для per_expand).Результат (с использованием Opera):
Далее (нажмите ссылку Периоды):
Далее (нажмите подпериоды):
Кажется, все в порядке, работа по расширению и свертыванию, как и ожидалось.