У вас есть два шаблона с абсолютно одинаковым шаблоном соответствия: 'ss:Workbook/ss:Worksheet/ss:Table'
В соответствии со спецификацией XSLT это исправимая ошибка, и наблюдаемое здесь восстановление заключается в том, что шаблон, который приходит последним, выбирается.
Другое наблюдение состоит в том, что инструкция :
<xsl:apply-templates select='ss:Workbook/ss:Worksheet/ss:Table'/>
внутри шаблона, соответствующего 'ss:Workbook/ss:Worksheet/ss:Table'
, , скорее всего, неверна - маловероятно, чтобудут 'ss:Workbook/ss:Worksheet/ss:Table'
элементы, у которых есть 'ss:Workbook/ss:Worksheet/ss:Table'
пра-пра-пра-родитель.
Я думаю, что вам нужно что-то вроде этого :
<xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'>
<grade-dist>
<xsl:apply-templates select="." mode="pr2"/>
</grade-dist>
</xsl:template>
<xsl:template mode="pr2" match='ss:Workbook/ss:Worksheet/ss:Table'>
<!-- Some necessary processing -->
</xsl:template>
или просто :
<xsl:template match='ss:Workbook/ss:Worksheet/ss:Table'>
<grade-dist>
<!-- Do the processing here -->
</grade-dist>
</xsl:template>