Escenario ciclos de informática con XSLT

De MediaWiki
Ir a la navegación Ir a la búsqueda

Enunciado

XML orixinal:

<cifp nome="CIFP Rodolfo Ucha" web="https://www.cifprodolfoucha.es/" >
  <ciclos>
    <ciclo id="ASIR">
      <nome>Administración de Sistemas Informáticos en Rede</nome>
      <grao>Superior</grao>
      <decretoTitulo ano="2009" />
    </ciclo>
    <ciclo id="DAW">
      <nome>Desarrollo de Aplicaciones Web</nome>
      <grao>Superior</grao>
      <decretoTitulo ano="2010" />
    </ciclo>
    <ciclo id="DAM">
      <nome>Desenvolvemento de Aplicacións Multiplataforma</nome>
      <grao>Superior</grao>
      <decretoTitulo ano="2010" />
    </ciclo>
    <ciclo id="SMR">
      <nome>Sistemas Microinformáticos e Redes</nome>
      <grao>Medio</grao>
      <decretoTitulo ano="2008" />
    </ciclo>
  </ciclos>
</cifp>

Realiza as seguintes transformacións XSLT de dous xeitos distintos:

  • Utilizando unha plantilla (template) para cada elemento e atributo que se necesite transformar
  • Utilizando so a plantilla raíz e bucles (for-each) para cada elemento que se necesite transformar

Transformacións

Amosar os nomes dos ciclos sin etiquetas

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  
   <!-- Plantilla raíz -->
  <xsl:template match="/">
    <xsl:apply-templates select="cifp/ciclos/ciclo/nome" />
  </xsl:template>

  <!-- Plantilla nome -->
  <xsl:template match="/cifp/ciclos/ciclo/nome">
    <xsl:value-of select="." />
  </xsl:template>
</xsl:stylesheet>

Amosar en parágrafos cada un dos nomes dos ciclos

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes" />
  
   <!-- Plantilla raíz -->
  <xsl:template match="/">
    <html>
      <body>
        <xsl:apply-templates select="cifp/ciclos/ciclo/nome" />
      </body>
    </html>
  </xsl:template>

  <!-- Plantilla nome -->
  <xsl:template match="/cifp/ciclos/ciclo/nome">
    <p><xsl:value-of select="." /></p>
  </xsl:template>
</xsl:stylesheet>

Amosar nunha lista sin numerar os nomes dos ciclos e entre paréntese o seu grao

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes" />
  
   <!-- Plantilla raíz -->
  <xsl:template match="/">
    <html>
      <body>
          <xsl:apply-templates select="cifp/ciclos" />
      </body>
    </html>
  </xsl:template>

  <!-- Plantilla ciclos -->
  <xsl:template match="/cifp/ciclos">
    <ul><xsl:apply-templates select="ciclo" /></ul>
  </xsl:template>

  <!-- Plantilla ciclo -->
  <xsl:template match="/cifp/ciclos/ciclo">
    <li><xsl:apply-templates select="nome" /> (<xsl:apply-templates select="grao" />)</li>
  </xsl:template>

  <!-- Plantilla nome -->
  <xsl:template match="/cifp/ciclos/ciclo/nome">
    <xsl:value-of select="." />
  </xsl:template>

  <!-- Plantilla grao -->
  <xsl:template match="/cifp/ciclos/ciclo/grao">
    <xsl:value-of select="." />
  </xsl:template>
</xsl:stylesheet>

Amosar nunha lista numerada ordenada

Amosar:

  • nunha lista numerada os nomes dos ciclos ordenados alfabéticamente de xeito descendente
  • e entre paréntese o seu grao.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes" />
  
   <!-- Plantilla raíz -->
  <xsl:template match="/">
    <html>
      <body>
          <xsl:apply-templates select="cifp/ciclos" />
      </body>
    </html>
  </xsl:template>

  <!-- Plantilla ciclos -->
  <xsl:template match="/cifp/ciclos">
    <ol>
      <xsl:apply-templates select="ciclo" >
        <xsl:sort select="nome" order="descending" />
      </xsl:apply-templates>
    </ol>
  </xsl:template>

  <!-- Plantilla ciclo -->
  <xsl:template match="/cifp/ciclos/ciclo">
    <li><xsl:apply-templates select="nome" /> (<xsl:apply-templates select="grao" />)</li>
  </xsl:template>

  <!-- Plantilla nome -->
  <xsl:template match="/cifp/ciclos/ciclo/nome">
    <xsl:value-of select="." />
  </xsl:template>

  <!-- Plantilla grao -->
  <xsl:template match="/cifp/ciclos/ciclo/grao">
    <xsl:value-of select="." />
  </xsl:template>
</xsl:stylesheet>

Amosar nunha táboa

Amosar:

  • nunha etiqueta h2 o nome do instituto
  • nunha táboa
  • na súa fila encabezado as seguintes columnas: nome do ciclo e ano
  • Se o ano é
  • maior que o 2009 o fondo será de cor verde
  • igual ó 2009 de cor azul
  • e se é menor ó 2009 de cor vermella
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes" />
  
   <!-- Plantilla raíz -->
  <xsl:template match="/">
    <html>
      <body>
          <xsl:apply-templates select="cifp" />
      </body>
    </html>
  </xsl:template>

  <!-- Plantilla cifp -->
  <xsl:template match="/cifp">
    <h1><xsl:value-of select="@nome" /></h1>
    <xsl:apply-templates select="ciclos" />
  </xsl:template>

  <!-- Plantilla ciclos -->
  <xsl:template match="/cifp/ciclos">
    <table border="1">
      <tr><th>Nome</th><th>Ano</th></tr>
      <xsl:apply-templates select="ciclo" />
    </table>
  </xsl:template>

  <!-- Plantilla ciclo -->
  <xsl:template match="/cifp/ciclos/ciclo">
    <tr>
      <td><xsl:apply-templates select="nome" /></td>
      <td><xsl:apply-templates select="decretoTitulo" /></td>
    </tr>
  </xsl:template>

  <!-- Plantilla nome -->
  <xsl:template match="/cifp/ciclos/ciclo/nome">
    <xsl:value-of select="." />
  </xsl:template>

  <!-- Plantilla decretoTitulo -->
  <xsl:template match="/cifp/ciclos/ciclo/decretoTitulo">
    <xsl:choose>
      <xsl:when test="@ano &gt; 2009">
        <span style="color: green;"><xsl:value-of select="@ano" /></span>
      </xsl:when>
      <xsl:when test="@ano &lt; 2009">
        <span style="color: red"><xsl:value-of select="@ano" /></span>
      </xsl:when>
      <xsl:otherwise>
        <span style="color: blue"><xsl:value-of select="@ano" /></span>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

Referencias