Сначала вы преобразуете все с идентичным преобразованием
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
после этого атрибута дескриптора, как показано ниже
<xsl:template match="@*[contains(name(.), '_')]">
<xsl:attribute name="{translate(name(), '_', '-')}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
Выход
<class student="TUTORIAL" Book-type="science" num-pages="250" online-license="yes" tag="online library"/>