Condiciones

En XSLT existen dos elementos con los que podemos establecer condiciones: el elemento <xsl:if> y el elemento <xsl:choose>.

<xsl:if>

El elemento <xsl:if> nos permite crear condiciones. El elemento consta de un atributo obligatorio test, cuyo valor contiene la expresión que se evaluará en el documento de origen. A diferencia de otros lenguajes de programación, en XSLT no se da ninguna conexión entre IF y ELSE.

La hoja de estilo:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="iso-8859-1" version="1.0"/>
    <xsl:template match="antologia">
        <html>
           <body>
             <xsl:apply-templates/>
           </body>
        </html>
    </xsl:template>
    <xsl:template match="autor">
        <br/>
        <h4>
            <xsl:apply-templates/>
        </h4>
    </xsl:template>
    <xsl:template match="nombre">
            <xsl:apply-templates/>
            <xsl:text> </xsl:text>
    </xsl:template>
    <xsl:template match="apellido">
            <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="titulo">
        <h2>
            <xsl:apply-templates/>
        </h2>
    </xsl:template>
    <xsl:template match="estrofa">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>
    <xsl:template match="verso">
            <xsl:apply-templates/>
        <br/>
    </xsl:template>
    <xsl:template match="poema">
        <br/>
        <xsl:if test="@idioma='el'">El poema está en griego.</xsl:if>     (1)
        <xsl:if test="@idioma='en'">El poema está en inglés.</xsl:if>
        <xsl:if test="@idioma='de'">El poema está en alemán.</xsl:if>
           <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet> 

(1) Como podemos comprobar, el contenido del elemento <xsl:if> se ejecuta si se produce una coincidencia entre la expresión contenida en el atributo test y el documento de origen.

Vista del navegador:

Vista del navegador

Ejercicio 4

Haga los cambios necesarios en la hoja de estilo para que sólo aparezcan poemas en griego.

>> ver solución del ejercicio 4

<xsl:choose>

El elemento <xsl:choose> con sus elementos secundarios <xsl:when> y <xsl:otherwise> se corresponde con la estructura condicional switch/case en otros lenguajes de programación.

Esta estructura permite establecer varias condiciones. Además, se puede fijar un valor, que se asignará en caso de ninguna de éstas se cumpla. La estructura debe comenzar con el elemento <xsl:choose>. El elemento puede contener tantos elementos secundarios <xsl:when> como se desee y un único elemento <xsl:otherwise>. El elemento <xsl:when> dispone al igual que el elemento <xsl:if> de un atributo obligatorio test. Si se cumple la expresión contenida en el atributo test, se copiará el contenido del elemento en el árbol resultado. La diferencia más notable entre el elemento <xsl:if><xsl:choose>/<xsl:when> es la posibilidad que ofrece esta última de introducir el elemento <xsl:otherwise>. Este elemento entra en acción cuando no se cumple ninguna de las condiciones establecidas por <xsl:when>

La hoja de estilo:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output encoding="iso-8859-1" version="1.0"/>
    <xsl:template match="antologia">
        <html>
            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="autor">
           <br/>
           <h4>
               <xsl:apply-templates/>
          </h4>
    </xsl:template>
    <xsl:template match="nombre">
              <xsl:apply-templates/>
              <xsl:text> </xsl:text>
    </xsl:template>
    <xsl:template match="apellido">
              <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="titulo">
          <h2>
              <xsl:apply-templates/>
          </h2>
    </xsl:template>
    <xsl:template match="estrofa">
          <p>
              <xsl:apply-templates/>
          </p>
    </xsl:template>
    <xsl:template match="Vers">
              <xsl:apply-templates/>
              <br/>
    </xsl:template>
    <xsl:template match="poema">
              <br/>
              <xsl:choose>                                                                 (1)
                  <xsl:when test="@idioma='el'">El poema está en griego.</xsl:when> 
                  <xsl:when test="@idioma='en'">El poema está en inglés.</xsl:when>  (2)
                  <xsl:otherwise>El poema está en alemán.</xsl:otherwise>              (3)
             </xsl:choose>
             <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

(1) La estructura condicional está comprendida entre los elementos <xsl:choose>. Los elementos <xsl:when> y <xsl:otherwise> sólo son válidos como elementos secundarios de <xsl:choose>.

(2) El elemento <xsl:when> se ejecuta si se cumple la expresión del atributo test. En este caso se evalúa si el contenido del nodo actual, es decir, @idioma, posee el valor "en". Si el valor coincide con la expresión aparecerá el texto "El poema está en inglés" en el documento de salida.

(3) El elemento <xsl:otherwise> se ejecutará en caso de que no se cumpla ninguna de las condiciones establecidas por los elementos <xsl:when>.

<< anterior siguiente >>

 


© Derechos de autor 2004, dpunkt.verlag GmbH
El usuario podrá imprimir la versión online. La copia será exclusivamente para uso personal. Por lo demás el presente capítulo del libro "XSL-FO in der Praxis" está sometido a los mismos términos y condiciones que la versión impresa. La presente obra está protegida en su totalidad por la ley de propiedad intelectual. Reservados todos los derechos, incluyendo los derechos de reproducción, traducción, microfilmación, así como el almacenamiento y procesamiento en sistemas electrónicos.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, teléfono + 49 (0) 6221-14830, fax +49 (0) 6221-148399, hallo(at)dpunkt.de