transformación
Publicado por rodic (1 intervención) el 08/04/2019 19:33:07
Hola, estoy realizando un ejercicio de conversión y adaptación de XML y tengo un par de dudas, en primer lugar os copio los códigos:
XML:
3 <notas>
4 <alumno convocatoria="Septiembre">
5 <nombre>Carlos</nombre>
6 <apellidos>Amaya Arozamena</apellidos>
7 <matricula>m019843</matricula>
8 <cuestionarios>8.0</cuestionarios>
9 <tareas>8.0</tareas>
10 <examen>6.0</examen>
11 <final>8.0</final>
12 </alumno>
13 <alumno convocatoria="Junio">
14 <nombre>Jose</nombre>
15 <apellidos>Muñoz Soto</apellidos>
16 <matricula>m019872</matricula>
17 <cuestionarios>7.0</cuestionarios>
18 <tareas>9.0</tareas>
19 <examen>7.0</examen>
20 <final>8.5</final>
21 </alumno>
22 <alumno convocatoria="Junio">
23 <nombre>Ana</nombre>
24 <apellidos>Martinez de la Fuente</apellidos>
25 <matricula>m097215</matricula>
26 <cuestionarios>8.0</cuestionarios>
27 <tareas>9.0</tareas>
28 <examen>9.0</examen>
29 <final>8.5</final>
30 </alumno>
31 <alumno convocatoria="Septiembre">
32 <nombre>Roberto</nombre>
33 <apellidos>Carrera Fernández</apellidos>
34 <matricula>m059312</matricula>
35 <cuestionarios>6.0</cuestionarios>
36 <tareas>7.0</tareas>
37 <examen>6.0</examen>
38 <final>6.5</final>
39 </alumno>
40 <alumno convocatoria="Septiembre">
41 <nombre>Concepción</nombre>
42 <apellidos>Lalinde Priego</apellidos>
43 <matricula>m034093</matricula>
44 <cuestionarios>4.0</cuestionarios>
45 <tareas>3.0</tareas>
46 <examen>2.0</examen>
47 <final>3.0</final>
48 </alumno>
49 <alumno convocatoria="Junio">
50 <nombre>Esther</nombre>
51 <apellidos>Pereda</apellidos>
52 <matricula>m938762</matricula>
53 <cuestionarios>2.0</cuestionarios>
54 <tareas>3.0</tareas>
55 <examen>2.0</examen>
56 <final>2.5</final>
57 </alumno>
58 </notas>
XSL:
3 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
4 <xsl:output method="html"/>
5
6 <xsl:template match="/">
7 <html>
8 <head>
9 <title><xsl:template select="notas"/></title>
10 </head>
11 <body>
12 <h1>NOTAS</h1>
13 <h2>CONVOCATORIA DE JUNIO</h2>
14 <h3>Alumnos</h3>
15 <xsl:apply-templates select="notas/alumno"/>
16 </body>
17 </html>
18 </xsl:template>
19
20 <xsl:template match="alumno">
21 <p>
22 <table align="center" border="1">
23 <td><b>Nombre</b>
24 <p><xsl:value-of select="nombre"/></p>
25 </td>
26 <td>
27 <b>Apellidos</b>
28 <p><xsl:value-of select="apellidos"/></p>
29 </td>
30 <td><b>Tareas</b>
31 <p><xsl:value-of select="tareas"/></p>
32 </td>
33 <td><b>Cuestionarios</b>
34 <p><xsl:value-of select="cuestionarios"/></p>
35 </td>
36 <td><b>Nota Final</b>
37 <p><xsl:value-of select="final"/></p>
38 </td>
39 </table>
40 </p>
41 </xsl:template>
42
43
44 </xsl:stylesheet>
Tal como lo tengo, he conseguido mostrar en web los datos de todos los alumnos en una tabla, sin embargo, necesito filtar únicamente los de la convocatoria "Junio". Lo intento modificando la siguiente línea:
<xsl:template match="alumno[@convocatoria='Junio']">
Pero no me hace lo que quiero. ¿Donde tendría que hacer el filtro del atributo de la convocatoria?
Por otro lado, necesito mostrar las notas en letra según el intervalo de éstas (>9 (SOBRESALIENTE), >=7(NOTABLE)... etc), pero tengo la duda del código en sí, y en cual de los dos documentos debo ponerlo, si en el XML o el XSL.
A ver si me podéis orientar un poco, gracias.
PD: intento copiarlo y pegarlo con formato mediante print HTML pero no se pega el formato, lo siento.
Un saludo.
XML:
3 <notas>
4 <alumno convocatoria="Septiembre">
5 <nombre>Carlos</nombre>
6 <apellidos>Amaya Arozamena</apellidos>
7 <matricula>m019843</matricula>
8 <cuestionarios>8.0</cuestionarios>
9 <tareas>8.0</tareas>
10 <examen>6.0</examen>
11 <final>8.0</final>
12 </alumno>
13 <alumno convocatoria="Junio">
14 <nombre>Jose</nombre>
15 <apellidos>Muñoz Soto</apellidos>
16 <matricula>m019872</matricula>
17 <cuestionarios>7.0</cuestionarios>
18 <tareas>9.0</tareas>
19 <examen>7.0</examen>
20 <final>8.5</final>
21 </alumno>
22 <alumno convocatoria="Junio">
23 <nombre>Ana</nombre>
24 <apellidos>Martinez de la Fuente</apellidos>
25 <matricula>m097215</matricula>
26 <cuestionarios>8.0</cuestionarios>
27 <tareas>9.0</tareas>
28 <examen>9.0</examen>
29 <final>8.5</final>
30 </alumno>
31 <alumno convocatoria="Septiembre">
32 <nombre>Roberto</nombre>
33 <apellidos>Carrera Fernández</apellidos>
34 <matricula>m059312</matricula>
35 <cuestionarios>6.0</cuestionarios>
36 <tareas>7.0</tareas>
37 <examen>6.0</examen>
38 <final>6.5</final>
39 </alumno>
40 <alumno convocatoria="Septiembre">
41 <nombre>Concepción</nombre>
42 <apellidos>Lalinde Priego</apellidos>
43 <matricula>m034093</matricula>
44 <cuestionarios>4.0</cuestionarios>
45 <tareas>3.0</tareas>
46 <examen>2.0</examen>
47 <final>3.0</final>
48 </alumno>
49 <alumno convocatoria="Junio">
50 <nombre>Esther</nombre>
51 <apellidos>Pereda</apellidos>
52 <matricula>m938762</matricula>
53 <cuestionarios>2.0</cuestionarios>
54 <tareas>3.0</tareas>
55 <examen>2.0</examen>
56 <final>2.5</final>
57 </alumno>
58 </notas>
XSL:
3 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
4 <xsl:output method="html"/>
5
6 <xsl:template match="/">
7 <html>
8 <head>
9 <title><xsl:template select="notas"/></title>
10 </head>
11 <body>
12 <h1>NOTAS</h1>
13 <h2>CONVOCATORIA DE JUNIO</h2>
14 <h3>Alumnos</h3>
15 <xsl:apply-templates select="notas/alumno"/>
16 </body>
17 </html>
18 </xsl:template>
19
20 <xsl:template match="alumno">
21 <p>
22 <table align="center" border="1">
23 <td><b>Nombre</b>
24 <p><xsl:value-of select="nombre"/></p>
25 </td>
26 <td>
27 <b>Apellidos</b>
28 <p><xsl:value-of select="apellidos"/></p>
29 </td>
30 <td><b>Tareas</b>
31 <p><xsl:value-of select="tareas"/></p>
32 </td>
33 <td><b>Cuestionarios</b>
34 <p><xsl:value-of select="cuestionarios"/></p>
35 </td>
36 <td><b>Nota Final</b>
37 <p><xsl:value-of select="final"/></p>
38 </td>
39 </table>
40 </p>
41 </xsl:template>
42
43
44 </xsl:stylesheet>
Tal como lo tengo, he conseguido mostrar en web los datos de todos los alumnos en una tabla, sin embargo, necesito filtar únicamente los de la convocatoria "Junio". Lo intento modificando la siguiente línea:
<xsl:template match="alumno[@convocatoria='Junio']">
Pero no me hace lo que quiero. ¿Donde tendría que hacer el filtro del atributo de la convocatoria?
Por otro lado, necesito mostrar las notas en letra según el intervalo de éstas (>9 (SOBRESALIENTE), >=7(NOTABLE)... etc), pero tengo la duda del código en sí, y en cual de los dos documentos debo ponerlo, si en el XML o el XSL.
A ver si me podéis orientar un poco, gracias.
PD: intento copiarlo y pegarlo con formato mediante print HTML pero no se pega el formato, lo siento.
Un saludo.
Valora esta pregunta


0