XSLT - Soluciones (1)

Se ofrecen a continuación unas posibles soluciones de los ejercicios XSLT (1). Estos ejercicios se pueden resolver de varias maneras.

XSLT (1) - Ejercicio 1

XSLT (1) - Ejercicio 1-1 - Solución

Sin etiquetas:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="ciclo">
     <xsl:value-of select="nombre"/>
  </xsl:template>

</xsl:stylesheet>

XSLT (1) - Ejercicio 1-2 - Solución

Párrafos:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="ciclos">
    <html>
        <xsl:apply-templates />
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
     <p><xsl:value-of select="nombre"/></p>
  </xsl:template>

</xsl:stylesheet>

XSLT (1) - Ejercicio 1-3 - Solución

Lista:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="ciclos">
    <html>
    <ul>
        <xsl:apply-templates />
    </ul>
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
     <li><xsl:value-of select="nombre"/></li>
  </xsl:template>

</xsl:stylesheet>

XSLT (1) - Ejercicio 1-4 - Solución

Tabla:

En XML Copy editor, la siguiente hoja de estilo genera un resultado correcto, pero con un formato distinto al del enunciado (saltos de línea y espacios).

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="ciclos">
    <html>
    <table border="1">
      <xsl:apply-templates />
    </table>
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
    <tr>
      <td><xsl:value-of select="nombre"/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>


<html>
  <table border="1">
    <tr><td>Administración de Sistemas Informáticos en Red</td></tr>
    <tr><td>Desarrollo de Aplicaciones Web</td></tr>
    <tr><td>Sistemas Microinformáticos y Redes</td></tr>
  </table>
</html>

Para que el formato fuera como en el enunciado, bastaría con añadir la instrucción <xsl:strip-space>:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />

  <xsl:template match="ciclos">
    <html>
    <table border="1">
      <xsl:apply-templates />
    </table>
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
    <tr>
      <td><xsl:value-of select="nombre"/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<html>
  <table border="1">
    <tr>
      <td>Administración de Sistemas Informáticos en Red</td>
    </tr>
    <tr>
      <td>Desarrollo de Aplicaciones Web</td>
    </tr>
    <tr>
      <td>Sistemas Microinformáticos y Redes</td>
    </tr>
  </table>
</html>

En Notepad++ con XML Tools, la siguiente hoja de estilo genera un resultado correcto, pero con un formato distinto al del enunciado (saltos de línea y espacios).

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="ciclos">
    <html>
    <table border="1">
      <xsl:apply-templates />
    </table>
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
    <tr>
      <td><xsl:value-of select="nombre"/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>
<html><table border="1">
    <tr><td>Administración de Sistemas Informáticos en Red</td></tr>
    <tr><td>Desarrollo de Aplicaciones Web</td></tr>
    <tr><td>Sistemas Microinformáticos y Redes</td></tr>
  </table></html>

Para que el formato fuera como en el enunciado, habría que añadir instrucciones<xsl:text> en los sitios necesarios:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="ciclos">
    <html>
    <xsl:text>&#10;  </xsl:text>
    <table border="1">
      <xsl:apply-templates />
    </table>
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
    <tr>
      <xsl:text>&#10;      </xsl:text>
      <td><xsl:value-of select="nombre"/></td>
      <xsl:text>&#10;    </xsl:text>
    </tr>
  </xsl:template>

</xsl:stylesheet>

<html>
  <table border="1">
    <tr>
      <td>Administración de Sistemas Informáticos en Red</td>
    </tr>
    <tr>
      <td>Desarrollo de Aplicaciones Web</td>
    </tr>
    <tr>
      <td>Sistemas Microinformáticos y Redes</td>
    </tr>
  </table>
</html>

XSLT (1) - Ejercicio 2

XSLT (1) - Ejercicio 2-1 - Solución

Párrafos:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />

  <xsl:template match="ies">
    <html>
      <h1><xsl:value-of select="@nombre" /></h1>
      <xsl:apply-templates />
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
    <p><xsl:value-of select="nombre" /></p>
  </xsl:template>

</xsl:stylesheet>

Una solución un poco más complicada, pero que da el mismo resultado que la anterior, podría ser la siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />

  <xsl:template match="/">
    <html>
      <xsl:apply-templates />
    </html>
  </xsl:template>

  <xsl:template match="ies">
      <h1><xsl:value-of select="@nombre" /></h1>
      <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="ciclo">
    <p><xsl:value-of select="nombre" /></p>
  </xsl:template>

</xsl:stylesheet>

Para arreglar el formato, habría que eliminar las líneas en blanco de la misma manera.

XSLT (1) - Ejercicio 2-2 - Solución

Lista:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />

  <xsl:template match="ies">
    <html>
      <h1><xsl:value-of select="@nombre" /></h1>
      <p>Página web: <a >
        <xsl:attribute name="href">
          <xsl:value-of select="@web" />
        </xsl:attribute>
        <xsl:value-of select="@web" /></a></p>
      <ul>
       <xsl:apply-templates />
      </ul>
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
     <li><xsl:value-of select="nombre"/></li>
  </xsl:template>

</xsl:stylesheet>

XSLT (1) - Ejercicio 2-3 - Solución

Tabla:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />

  <xsl:template match="ies">
    <html>
      <h1><xsl:value-of select="@nombre" /></h1>
      <p>Página web: <a >
        <xsl:attribute name="href">
          <xsl:value-of select="@web" />
        </xsl:attribute>
        <xsl:value-of select="@web" /></a></p>
      <table border="1">
        <tr>
          <th>Nombre del ciclo</th>
          <th>Grado</th>
          <th>Año del título</th>
        </tr>
        <xsl:apply-templates />
      </table>
    </html>
  </xsl:template>

  <xsl:template match="ciclo">
    <tr>
      <td><xsl:value-of select="nombre"/></td>
      <td><xsl:value-of select="grado"/></td>
      <td><xsl:value-of select="decretoTitulo/@año"/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

XSLT (1) - Ejercicio 3

XSLT (1) - Ejercicio 3-1 - Solución

Párrafos:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />

  <xsl:template match="ies">
    <html>
      <xsl:apply-templates />
    </html>
  </xsl:template>

  <xsl:template match="nombre">
      <h1><xsl:value-of select="." /></h1>
  </xsl:template>

  <xsl:template match="web">
  </xsl:template>

  <xsl:template match="ciclo">
    <p><xsl:value-of select="nombre" /></p>
  </xsl:template>

</xsl:stylesheet>

XSLT (1) - Ejercicio 3-2 - Solución

Lista:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />

  <xsl:template match="ies">
    <html>
      <xsl:apply-templates />
    </html>
  </xsl:template>

  <xsl:template match="nombre">
      <h1>Ciclos formativos del <xsl:value-of select="." /></h1>
  </xsl:template>

  <xsl:template match="web">
  </xsl:template>

  <xsl:template match="ciclos">
    <ul>
    <xsl:apply-templates />
    </ul>
  </xsl:template>

  <xsl:template match="ciclo">
    <li><xsl:value-of select="@id" /><br />
    <xsl:value-of select="nombre" />, Ciclo Formativo de Grado <xsl:value-of select="grado" />
    creado en <xsl:value-of select="decretoTitulo/@año" /></li>
  </xsl:template>

</xsl:stylesheet>

XSLT (1) - Ejercicio 3-3 - Solución

Tabla:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*" />

  <xsl:template match="ies">
    <html>
      <xsl:apply-templates />
    </html>
  </xsl:template>

  <xsl:template match="nombre">
    <h1><xsl:value-of select="." /></h1>
  </xsl:template>

  <xsl:template match="web">
  </xsl:template>

  <xsl:template match="ciclos">
   <table border="1">
    <tr>
      <th>Nombre del ciclo</th>
      <th>Grado</th>
      <th>Año del título</th>
    </tr>
     <xsl:apply-templates />
    </table>
  </xsl:template>

  <xsl:template match="ciclo">
    <tr>
      <td><xsl:value-of select="nombre"/></td>
      <td><xsl:value-of select="grado"/></td>
      <td><xsl:value-of select="decretoTitulo/@año"/></td>
    </tr>
  </xsl:template>
</xsl:stylesheet>