pues na, que me han dicho que aqui me podiais ayudar a ver si me podiais decir como puedo poner el siguiente codigo pero de manera más optimizada
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title> PA_8 </title>
<center><h1>Alumnos matriculados de cada asignatura</h1></center>
</head>
<body>
<xsl:for-each select="matriculados/asignaturas/asignatura">
<xsl:sort select="curso"/>
<xsl:sort select="nombre"/>
<h2>Asignatura:<xsl:value-of select="nombre"/></h2>
<h3>Curso:<xsl:value-of select="curso"/></h3>
<xsl:call-template name="alumnos">
<xsl:with-param name="cod_asig"><xsl:value-of select="@cod_asig"/></xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="alumnos">
<xsl:param name="cod_asig"/>
<table border="1">
<tr bgcolor="silver">
<th>Nombre</th>
<th>Convocatoria</th>
</tr>
<xsl:for-each select="/matriculados/alumnos/alumno">
<xsl:variable name="alumn"><xsl:value-of select="nombre"/></xsl:variable>
<xsl:for-each select="matriculas/matricula">
<xsl:variable name="convocatori"><xsl:value-of select="@tipo"/></xsl:variable>
<xsl:if test="@cod_asig=$cod_asig">
<tr>
<th><xsl:value-of select="$alumn"/></th>
<xsl:choose>
<xsl:when test="$convocatori='O'">
<th>Ordinaria</th>
</xsl:when>
<xsl:otherwise>
<th>Extraordinaria</th>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
el xml sobre el que aplico el xsl anterior es el siguiente:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="PA_8.xsl"?>
<matriculados>
<asignaturas>
<asignatura cod_asig="B1" creditos="6" tipo="T">
<nombre>Sistemas Operativos I</nombre>
<curso>Primero</curso>
</asignatura>
<asignatura cod_asig="C1" creditos="9" tipo="T">
<nombre>Estructura y tecnología de computadores</nombre>
<curso>Primero</curso>
</asignatura>
<asignatura cod_asig="A2" creditos="12" tipo="T">
<nombre>Estructura de Datos y de la Informacion</nombre>
<curso>Segundo</curso>
</asignatura>
<asignatura cod_asig="B3" creditos="15" tipo="T">
<nombre>Metodología de la Programación</nombre>
<curso>Tercero</curso>
</asignatura>
<asignatura cod_asig="A1" creditos="6" tipo="O">
<nombre>Programas de Aplicación I</nombre>
<curso>Primero</curso>
</asignatura>
<asignatura cod_asig="B2" creditos="6" tipo="O">
<nombre>Programas de Aplicación II</nombre>
<curso>Segundo</curso>
</asignatura>
<asignatura cod_asig="C2" creditos="9" tipo="O">
<nombre>Sistemas Operativos II</nombre>
<curso>Segundo</curso>
</asignatura>
<asignatura cod_asig="D2" creditos="4,5" tipo="O">
<nombre>Trasmisión de datos</nombre>
<curso>Segundo</curso>
</asignatura>
<asignatura cod_asig="A3" creditos="4,5" tipo="O">
<nombre>Explotacion de Sistemas</nombre>
<curso>Tercero</curso>
</asignatura>
<asignatura cod_asig="C3" creditos="9" tipo="O">
<nombre>Teleinformática</nombre>
<curso>Tercero</curso>
</asignatura>
<asignatura cod_asig="D1" creditos="4,5" tipo="OP">
<nombre>Marketing</nombre>
<curso>Primero</curso>
</asignatura>
<asignatura cod_asig="D3" creditos="4,5" tipo="OP">
<nombre>Programación Avanzada</nombre>
<curso>Tercero</curso>
</asignatura>
</asignaturas>
<alumnos>
<alumno expediente="J11111">
<nombre>Juan Martín Marcos</nombre>
<matriculas>
<matricula cod_asig="A1" tipo="O"/>
<matricula cod_asig="B1" tipo="O"/>
<matricula cod_asig="C1" tipo="O"/>
<matricula cod_asig="D1" tipo="O"/>
</matriculas>
</alumno>
<alumno expediente="L11112">
<nombre>Luis López González</nombre>
<matriculas>
<matricula cod_asig="A1" tipo="EX"/>
<matricula cod_asig="A2" tipo="O"/>
<matricula cod_asig="B2" tipo="O"/>
<matricula cod_asig="C2" tipo="O"/>
<matricula cod_asig="D2" tipo="O"/>
</matriculas>
</alumno>
<alumno expediente="M11113">
<nombre>María Isabel Lucas Benito</nombre>
<matriculas>
<matricula cod_asig="A3" tipo="O"/>
<matricula cod_asig="B3" tipo="O"/>
<matricula cod_asig="C3" tipo="O"/>
<matricula cod_asig="D3" tipo="O"/>
</matriculas>
</alumno>
<alumno expediente="A21111">
<nombre>Arturo Marcos Ramírez</nombre>
<matriculas>
<matricula cod_asig="A1" tipo="EX"/>
<matricula cod_asig="B2" tipo="O"/>
<matricula cod_asig="C2" tipo="O"/>
<matricula cod_asig="D3" tipo="O"/>
</matriculas>
</alumno>
<alumno expediente="F111185">
<nombre>Felipe Montes Verdes</nombre>
<matriculas>
<matricula cod_asig="A3" tipo="O"/>
<matricula cod_asig="B3" tipo="O"/>
<matricula cod_asig="C3" tipo="O"/>
<matricula cod_asig="D1" tipo="O"/>
<matricula cod_asig="D2" tipo="EX"/>
</matriculas>
</alumno>
<alumno expediente="M111154">
<nombre>María Merino Madroñal</nombre>
<matriculas>
<matricula cod_asig="A2" tipo="O"/>
<matricula cod_asig="B2" tipo="O"/>
<matricula cod_asig="C1" tipo="O"/>
<matricula cod_asig="D1" tipo="EX"/>
</matriculas>
</alumno>
<alumno expediente="J11188">
<nombre>Julio Gutiérrez Rasamayet</nombre>
<matriculas>
<matricula cod_asig="A2" tipo="O"/>
<matricula cod_asig="B2" tipo="O"/>
<matricula cod_asig="C1" tipo="EX"/>
</matriculas>
</alumno>
<alumno expediente="V11125">
<nombre>Vicente Ramírez Sañudo</nombre>
<matriculas>
<matricula cod_asig="D2" tipo="O"/>
<matricula cod_asig="A1" tipo="EX"/>
<matricula cod_asig="A2" tipo="O"/>
<matricula cod_asig="C3" tipo="O"/>
</matriculas>
</alumno>
<alumno expediente="A11170">
<nombre>Antonia Cifuentes López</nombre>
<matriculas>
<matricula cod_asig="A3" tipo="EX"/>
<matricula cod_asig="B3" tipo="EX"/>
</matriculas>
</alumno>
<alumno expediente="S11100">
<nombre>Sebastián Ramos Periñal</nombre>
<matriculas>
<matricula cod_asig="B1" tipo="EX"/>
<matricula cod_asig="D3" tipo="O"/>
</matriculas>
</alumno>
<alumno expediente="S11002">
<nombre>Saúl Sánchez Gonzalo</nombre>
<matriculas>
<matricula cod_asig="A2" tipo="O"/>
<matricula cod_asig="B2" tipo="EX"/>
<matricula cod_asig="D2" tipo="O"/>
</matriculas>
</alumno>
<alumno expediente="P10115">
<nombre>Paloma Vicente Romero</nombre>
<matriculas>
<matricula cod_asig="A3" tipo="EX"/>
</matriculas>
</alumno>
</alumnos>
</matriculados>