Atascado con XSL

Iniciado por Saberuneko, 3 Junio 2013, 23:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Saberuneko

[Estoy corto de tiempo, tengo hasta el 10-Junio]
(Nos han mandado esto a última hora)...


Nuestro profesor nos ha mandado hacer un proyecto, en el que damos formato a los datos de un XML con XSL.

Para la maquetación nos ha dicho que no debemos usar tablas, sino utilizar CSS. Cosa todavía no había intentado...

¿Cómo aplico una hoja de estilo a un XSL?

He probado con ponerlo en el header, tal como se haría en HTML, pero me da errores.
Error de lectura XML: mal formado
Ubicación: .../clima.xsl
Número de línea 6, columna 13


Tal que así:

Código (xml) [Seleccionar]
<head>
<link rel=StyleSheet href="style.css" type="text/css">
</head>


--

Este es el XML dado:
Código (xml) [Seleccionar]
<?xml version="1.0" encoding="ISO-8859-15" ?>
<?xml-stylesheet type="text/xsl" href="clima.xsl"?>
<root id="33044" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.aemet.es/xsd/localidades.xsd">
<origen>
<productor>Agencia Estatal de Meteorología - AEMET. Gobierno de España</productor>
<web>http://www.aemet.es</web>
<enlace>http://www.aemet.es/es/eltiempo/prediccion/municipios?l=33044</enlace>
<language>es</language>
<copyright>&#169; AEMET. Autorizado el uso de la información y su reproducción citando a AEMET como autora de la misma.</copyright>
<nota_legal>http://www.aemet.es/es/nota_legal</nota_legal>
</origen>
<elaborado>2013-06-03T09:05:03</elaborado>
<nombre>Oviedo</nombre>
<provincia>Asturias</provincia>
<prediccion>
<dia fecha="2013-06-03">
<prob_precipitacion periodo="00-12">0</prob_precipitacion>
<prob_precipitacion periodo="12-24">0</prob_precipitacion>
<prob_precipitacion periodo="00-06">0</prob_precipitacion>
<prob_precipitacion periodo="06-12">0</prob_precipitacion>
<prob_precipitacion periodo="12-18">0</prob_precipitacion>
<prob_precipitacion periodo="18-24">0</prob_precipitacion>
<cota_nieve_prov periodo="00-12"></cota_nieve_prov>
<cota_nieve_prov periodo="12-24"></cota_nieve_prov>
<cota_nieve_prov periodo="00-06"></cota_nieve_prov>
<cota_nieve_prov periodo="06-12"></cota_nieve_prov>
<cota_nieve_prov periodo="12-18"></cota_nieve_prov>
<cota_nieve_prov periodo="18-24"></cota_nieve_prov>
<estado_cielo periodo="00-12" descripcion="Poco nuboso">12</estado_cielo>
<estado_cielo periodo="12-24" descripcion="Poco nuboso">12</estado_cielo>
<estado_cielo periodo="00-06" descripcion="Despejado">11n</estado_cielo>
<estado_cielo periodo="06-12" descripcion="Poco nuboso">12</estado_cielo>
<estado_cielo periodo="12-18" descripcion="Poco nuboso">12</estado_cielo>
<estado_cielo periodo="18-24" descripcion="Poco nuboso">12</estado_cielo>
<viento periodo="00-12">
<direccion>NE</direccion>
<velocidad>20</velocidad>
</viento>
<viento periodo="12-24">
<direccion>E</direccion>
<velocidad>20</velocidad>
</viento>
<viento periodo="00-06">
<direccion>C</direccion>
<velocidad>0</velocidad>
</viento>
<viento periodo="06-12">
<direccion>NE</direccion>
<velocidad>20</velocidad>
</viento>
<viento periodo="12-18">
<direccion>E</direccion>
<velocidad>20</velocidad>
</viento>
<viento periodo="18-24">
<direccion>E</direccion>
<velocidad>5</velocidad>
</viento>
<racha_max periodo="00-12"></racha_max>
<racha_max periodo="12-24">45</racha_max>
<racha_max periodo="00-06"></racha_max>
<racha_max periodo="06-12"></racha_max>
<racha_max periodo="12-18">40</racha_max>
<racha_max periodo="18-24"></racha_max>
<temperatura>
<maxima>18</maxima>
<minima>8</minima>
<dato hora="06">8</dato>
<dato hora="12">16</dato>
<dato hora="18">16</dato>
<dato hora="24">11</dato>
</temperatura>
<sens_termica>
<maxima>18</maxima>
<minima>8</minima>
<dato hora="06">8</dato>
<dato hora="12">16</dato>
<dato hora="18">16</dato>
<dato hora="24">11</dato>
</sens_termica>
<humedad_relativa>
<maxima>90</maxima>
<minima>60</minima>
<dato hora="06">80</dato>
<dato hora="12">65</dato>
<dato hora="18">60</dato>
<dato hora="24">90</dato>
</humedad_relativa>
<uv_max>7</uv_max>
</dia>
<dia fecha="2013-06-04">
<prob_precipitacion periodo="00-12">0</prob_precipitacion>
<prob_precipitacion periodo="12-24">0</prob_precipitacion>
<prob_precipitacion periodo="00-06">0</prob_precipitacion>
<prob_precipitacion periodo="06-12">0</prob_precipitacion>
<prob_precipitacion periodo="12-18">0</prob_precipitacion>
<prob_precipitacion periodo="18-24">0</prob_precipitacion>
<cota_nieve_prov periodo="00-12"></cota_nieve_prov>
<cota_nieve_prov periodo="12-24"></cota_nieve_prov>
<cota_nieve_prov periodo="00-06"></cota_nieve_prov>
<cota_nieve_prov periodo="06-12"></cota_nieve_prov>
<cota_nieve_prov periodo="12-18"></cota_nieve_prov>
<cota_nieve_prov periodo="18-24"></cota_nieve_prov>
<estado_cielo periodo="00-12" descripcion="Despejado">11</estado_cielo>
<estado_cielo periodo="12-24" descripcion="Despejado">11</estado_cielo>
<estado_cielo periodo="00-06" descripcion="Despejado">11n</estado_cielo>
<estado_cielo periodo="06-12" descripcion="Despejado">11</estado_cielo>
<estado_cielo periodo="12-18" descripcion="Despejado">11</estado_cielo>
<estado_cielo periodo="18-24" descripcion="Despejado">11</estado_cielo>
<viento periodo="00-12">
<direccion>NE</direccion>
<velocidad>15</velocidad>
</viento>
<viento periodo="12-24">
<direccion>NE</direccion>
<velocidad>15</velocidad>
</viento>
<viento periodo="00-06">
<direccion>C</direccion>
<velocidad>0</velocidad>
</viento>
<viento periodo="06-12">
<direccion>NE</direccion>
<velocidad>15</velocidad>
</viento>
<viento periodo="12-18">
<direccion>NE</direccion>
<velocidad>15</velocidad>
</viento>
<viento periodo="18-24">
<direccion>C</direccion>
<velocidad>0</velocidad>
</viento>
<racha_max periodo="00-12"></racha_max>
<racha_max periodo="12-24"></racha_max>
<racha_max periodo="00-06"></racha_max>
<racha_max periodo="06-12"></racha_max>
<racha_max periodo="12-18"></racha_max>
<racha_max periodo="18-24"></racha_max>
<temperatura>
<maxima>19</maxima>
<minima>9</minima>
<dato hora="06">9</dato>
<dato hora="12">18</dato>
<dato hora="18">17</dato>
<dato hora="24">13</dato>
</temperatura>
<sens_termica>
<maxima>19</maxima>
<minima>9</minima>
<dato hora="06">9</dato>
<dato hora="12">18</dato>
<dato hora="18">17</dato>
<dato hora="24">13</dato>
</sens_termica>
<humedad_relativa>
<maxima>100</maxima>
<minima>55</minima>
<dato hora="06">100</dato>
<dato hora="12">60</dato>
<dato hora="18">55</dato>
<dato hora="24">80</dato>
</humedad_relativa>
<uv_max>7</uv_max>
</dia>
<dia fecha="2013-06-05">
<prob_precipitacion periodo="00-12">5</prob_precipitacion>
<prob_precipitacion periodo="12-24">15</prob_precipitacion>
<cota_nieve_prov periodo="00-12"></cota_nieve_prov>
<cota_nieve_prov periodo="12-24"></cota_nieve_prov>
<estado_cielo periodo="00-12" descripcion="Despejado">11</estado_cielo>
<estado_cielo periodo="12-24" descripcion="Intervalos nubosos">13</estado_cielo>
<viento periodo="00-12">
<direccion>NE</direccion>
<velocidad>15</velocidad>
</viento>
<viento periodo="12-24">
<direccion>NE</direccion>
<velocidad>15</velocidad>
</viento>
<racha_max periodo="00-12"></racha_max>
<racha_max periodo="12-24"></racha_max>
<temperatura>
<maxima>21</maxima>
<minima>11</minima>
</temperatura>
<sens_termica>
<maxima>21</maxima>
<minima>11</minima>
</sens_termica>
<humedad_relativa>
<maxima>85</maxima>
<minima>60</minima>
</humedad_relativa>
<uv_max>7</uv_max>
</dia>
<dia fecha="2013-06-06">
<prob_precipitacion periodo="00-12">35</prob_precipitacion>
<prob_precipitacion periodo="12-24">70</prob_precipitacion>
<cota_nieve_prov periodo="00-12"></cota_nieve_prov>
<cota_nieve_prov periodo="12-24">2400</cota_nieve_prov>
<estado_cielo periodo="00-12" descripcion="Intervalos nubosos">13</estado_cielo>
<estado_cielo periodo="12-24" descripcion="Muy nuboso con tormenta">53</estado_cielo>
<viento periodo="00-12">
<direccion>C</direccion>
<velocidad>0</velocidad>
</viento>
<viento periodo="12-24">
<direccion>NO</direccion>
<velocidad>5</velocidad>
</viento>
<racha_max periodo="00-12"></racha_max>
<racha_max periodo="12-24"></racha_max>
<temperatura>
<maxima>19</maxima>
<minima>12</minima>
</temperatura>
<sens_termica>
<maxima>19</maxima>
<minima>12</minima>
</sens_termica>
<humedad_relativa>
<maxima>90</maxima>
<minima>55</minima>
</humedad_relativa>
<uv_max>7</uv_max>
</dia>
<dia fecha="2013-06-07">
<prob_precipitacion>90</prob_precipitacion>
<cota_nieve_prov>2200</cota_nieve_prov>
<estado_cielo descripcion="Muy nuboso con tormenta">53</estado_cielo>
<viento>
<direccion>C</direccion>
<velocidad>0</velocidad>
</viento>
<racha_max></racha_max>
<temperatura>
<maxima>16</maxima>
<minima>10</minima>
</temperatura>
<sens_termica>
<maxima>16</maxima>
<minima>10</minima>
</sens_termica>
<humedad_relativa>
<maxima>95</maxima>
<minima>75</minima>
</humedad_relativa>
<uv_max>7</uv_max>
</dia>
<dia fecha="2013-06-08">
<prob_precipitacion>95</prob_precipitacion>
<cota_nieve_prov>2200</cota_nieve_prov>
<estado_cielo descripcion="Muy nuboso con tormenta">53</estado_cielo>
<viento>
<direccion>NO</direccion>
<velocidad>10</velocidad>
</viento>
<racha_max></racha_max>
<temperatura>
<maxima>15</maxima>
<minima>9</minima>
</temperatura>
<sens_termica>
<maxima>15</maxima>
<minima>9</minima>
</sens_termica>
<humedad_relativa>
<maxima>100</maxima>
<minima>80</minima>
</humedad_relativa>
</dia>
<dia fecha="2013-06-09">
<prob_precipitacion>80</prob_precipitacion>
<cota_nieve_prov>2500</cota_nieve_prov>
<estado_cielo descripcion="Muy nuboso con tormenta">53</estado_cielo>
<viento>
<direccion>N</direccion>
<velocidad>10</velocidad>
</viento>
<racha_max></racha_max>
<temperatura>
<maxima>16</maxima>
<minima>9</minima>
</temperatura>
<sens_termica>
<maxima>16</maxima>
<minima>8</minima>
</sens_termica>
<humedad_relativa>
<maxima>100</maxima>
<minima>85</minima>
</humedad_relativa>
</dia>
</prediccion>
</root>


--

Antes de meter nada más intenté meter la hoja de estilo, pero no pude.
De momento sólo tengo esto, en lo que leo un dato para probar que enlazan XSL con XML, el dato aparece, pero en cuanto intento enchufar la hoja de estilo, casca todo...

Código (xml) [Seleccionar]
<?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>
<link rel=StyleSheet href="style.css" type="text/css">
</head>
<body>
<div class = "caja">
<div class = "titulo">
Prediccion Meteorologica para los proximos 3 dias
</div>
<div class = "cuadro">
<div class = "texto">
Localidad: <xsl:value-of select="root/nombre"/>

</div>
</div>
</div>
</body>
</html>

</xsl:template>
</xsl:stylesheet>

Saberuneko

#1
Vale, pues se hace como lo tenía yo, sólo que tenía un error de escritura...

En vez de:
<link rel=StyleSheet href="style.css" type="text/css">
Era:
<link rel="stylesheet" type="text/css" href="style.css">

Saberuneko

#2
Vuelvo a tener un problema, estoy intentando acceder a los distintos datos por día. Pero no consigo sacar absolutamente nada por pantalla, mi código de momento es:

Código (xml) [Seleccionar]
<?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>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div class = "caja">
<div class = "titulo">
Prediccion Meteorologica para los proximos 3 dias
</div>
<div class = "cuadro">
<div class = "texto">
<table>
<tr>
<td>Localidad: <xsl:value-of select="root/nombre"/></td>
</tr>
<tr>
<td>Provincia: <xsl:value-of select="root/provincia"/></td>
</tr>
</table>
</div>
</div>
<div class = "cuadro">
<div class = "texto">
<table>
<tr>
<xsl:for-each select="root/prediccion/dia">
<td><xsl:value-of select="root/prediccion/dia/@fecha"/></td>
</xsl:for-each>
</tr>
</table>
</div>
</div>
</div>
</body>
</html>

</xsl:template>
</xsl:stylesheet>


No consigo sacar las fechas como elemento de la nueva tabla. ¿Qué hago mal? Llevo atascado seis horas a base de ensayo y error, porque la información que encuentro no me está ayudando...

Saberuneko

Por alguna razón que escapa a mi entendimiento el xsl:for-each no estaba funcionando como debería.

Un arreglo chapucero me ha solucionado temporalmente el problema, y me cubre otra necesidad, ya que en vez de todos los registros del XML, estoy intentando llevarme los 3 primeros nada más.

Aquí el code:

Código (xml) [Seleccionar]
<td><xsl:value-of select="root/prediccion/dia[position()=1]/@fecha"/></td>
<td><xsl:value-of select="root/prediccion/dia[position()=2]/@fecha"/></td>
<td><xsl:value-of select="root/prediccion/dia[position()=3]/@fecha"/></td>


Básicamente pasé de usar un for-each y he recogido las posiciones manualmente una a una.

Si alguien tiene una solución mejor, que me responda, que me estoy partiendo el cráneo para sacar esto adelante a tiempo.

Saberuneko

Ya lo he terminado. Pasaré mi solución cuando termine el plazo de entrega.
(No estaría bien que me lo copiase gente antes de tiempo).

Saberuneko

Bueno, comparto mi solución final:
XSL:

Código (xml) [Seleccionar]
<?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>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div class = "caja">
<div class = "titulo">
Prediccion Meteorologica para los proximos 3 dias
</div>
<div class = "cuadro">
<div class = "texto">
<table>
<tr>
<td>Localidad: <xsl:value-of select="root/nombre"/></td>
</tr>
<tr>
<td>Provincia: <xsl:value-of select="root/provincia"/></td>
</tr>
</table>
</div>
</div>
<div class = "cuadro">
<div class = "texto">
<center><table>
<tr>
<td bgcolor ="#AAAAFF">Fecha:</td>
<td colspan = "4" bgcolor ="#AAAAFF"><xsl:value-of select="root/prediccion/dia[position()=1]/@fecha"/></td>
<td colspan = "4" bgcolor ="#AAAAFF"><xsl:value-of select="root/prediccion/dia[position()=2]/@fecha"/></td>
<td colspan = "2" bgcolor ="#AAAAFF"><xsl:value-of select="root/prediccion/dia[position()=3]/@fecha"/></td>
</tr>
<tr>
<td bgcolor ="#AAAAFF">Periodos:</td>
<td bgcolor ="#AAAAFF">00-06</td><td bgcolor ="#AAAAFF">06-12</td><td bgcolor ="#AAAAFF">12-18</td><td bgcolor ="#AAAAFF">18-24</td>
<td bgcolor ="#AAAAFF">00-06</td><td bgcolor ="#AAAAFF">06-12</td><td bgcolor ="#AAAAFF">12-18</td><td bgcolor ="#AAAAFF">18-24</td>
<td bgcolor ="#AAAAFF">00-12</td><td bgcolor ="#AAAAFF">12-24</td>
</tr>
<tr>
<td bgcolor ="#AAAAFF">Estado Cielo:</td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/estado_cielo[@periodo='00-06']/@descripcion"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/estado_cielo[@periodo='06-12']/@descripcion"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/estado_cielo[@periodo='12-18']/@descripcion"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/estado_cielo[@periodo='18-24']/@descripcion"/></td>

<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/estado_cielo[@periodo='00-06']/@descripcion"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/estado_cielo[@periodo='06-12']/@descripcion"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/estado_cielo[@periodo='12-18']/@descripcion"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/estado_cielo[@periodo='18-24']/@descripcion"/></td>

<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=3]/estado_cielo[@periodo='00-12']/@descripcion"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=3]/estado_cielo[@periodo='12-24']/@descripcion"/></td>
</tr>
<tr>
<td bgcolor ="#AAAAFF">Prob. Precipitaciones:</td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/prob_precipitacion[@periodo='00-06']"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/prob_precipitacion[@periodo='06-12']"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/prob_precipitacion[@periodo='12-18']"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/prob_precipitacion[@periodo='18-24']"/></td>

<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/prob_precipitacion[@periodo='00-06']"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/prob_precipitacion[@periodo='06-12']"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/prob_precipitacion[@periodo='12-18']"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/prob_precipitacion[@periodo='18-24']"/></td>

<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=3]/prob_precipitacion[@periodo='00-12']"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=3]/prob_precipitacion[@periodo='12-24']"/></td>
</tr>
<tr>
<td bgcolor ="#AAAAFF">Temp. Min/Max:</td>
<td bgcolor ="#9999FF"></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/temperatura/minima"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/temperatura/maxima"/></td>
<td bgcolor ="#9999FF"></td>

<td bgcolor ="#9999FF"></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/temperatura/minima"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/temperatura/maxima"/></td>
<td bgcolor ="#9999FF"></td>

<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=3]/temperatura/minima"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=3]/temperatura/maxima"/></td>
</tr>
<tr>
<td bgcolor ="#AAAAFF">Humedad Min/Max:</td>
<td bgcolor ="#9999FF"></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/humedad_relativa/minima"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=1]/humedad_relativa/maxima"/></td>
<td bgcolor ="#9999FF"></td>

<td bgcolor ="#9999FF"></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/humedad_relativa/minima"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=2]/humedad_relativa/maxima"/></td>
<td bgcolor ="#9999FF"></td>

<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=3]/humedad_relativa/minima"/></td>
<td bgcolor ="#FFFFFF"><xsl:value-of select="root/prediccion/dia[position()=3]/humedad_relativa/maxima"/></td>
</tr>
</table></center>
</div>
<div class="cpr">
<center>Fuente: Agencia Estatal de Meteorología - AEMET. Gobierno de España</center>
</div>
</div>
</div>
</body>
</html>

</xsl:template>
</xsl:stylesheet>

CSS:

Código (css) [Seleccionar]
body{ background-color:#9999FF;
font-family:"Microsoft Sans Serif";
font-size:16px;
float:none}

.caja{ background-color:#CCCCFF;
border-color:#FFFFFF;
border-style:double;
border-width: 10px;
float:none}

.cuadro{background-color:#3333FF;
border-style:simple;
border-width: 2px;
border-color: #6666FF;
float:none}

.titulo{background-color:#FFFFFF;
border-style:double;
border-width: 4px;
border-color: #FFFFFF;
text-align:center;
font-size:24px;
float:none}

.texto{ background-color:#CCCCFF;
border-width: 1px;
border-color:#FFFFFF;
text-align:left}

.cpr{ font-size:12px;
color:white}


Finalmente, tiene este aspecto:


PS: Por alguna razón la etiqueta code lo ha descolocado todo. No consigo arreglarlo.