Bucles

Como hemos mostrado anteriormente, los contenidos del documento de origen pueden copiarse en el documento de salida a través del elemento <xsl:apply-templates>. Sin embargo, a veces es necesario copiar sólo determinados elementos del documento de origen. Para estos casos puede usarse el elemento <xsl:for-each>, que es útil, por ejemplo, para la creación de índices. En el siguiente ejemplo mostramos cómo se genera un índice.

<?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>
            <h2>indice</h2>
            <xsl:for-each select="poema">             (1)
                <a>
                   <xsl:attribute name="href">#<xsl:value-of select="@añodepublicacion"/>
                   </xsl:attribute>                     (2)
                   <xsl:value-of select="titulo"/>
                </a>
                <br/>
            </xsl:for-each>
            <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>
          <a>
             <xsl:attribute name="nombre">             (3)
             <xsl:value-of select="parent::poema/@añodepublicacion"/>
             </xsl:attribute>
          </a>
          <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:stylesheet>

(1) El elemento <xsl:for-each> crea un bucle. Para cada coincidencia con los nodos seleccionados mediante el atributo select se realiza un recorrido. En la práctica se usan los bucles para establecer una selección. A menudo se recurre a los bucles para la creación de índices o registros. Para ello se extraen determinadas informaciones de todo el documento de origen que son presentadas con una estructura nueva.

(2) En este lugar se utiliza el bucle para mostrar todos los títulos de los poemas y establecer una referencia interna a los mismos en el lugar correspondiente del documento. Para ello, el elemento <xsl:attribute> crea atributos en el nodo padre, en este caso para el elemento <a>. El atributo obligatorio name da nombre a los atributos que se van a crear en el documento de salida, en este caso el atributo href, que determina el destino del enlace. El contenido del elemento <xsl:attribute> se convierte en el valor del atributo href en el documento de salida. El carácter # se usa en HTML para hacer referencia a un ancla que se encuentra en el documento actual. En nombre del ancla se define en este caso según el año de publicación, esto es, según el valor del atributo añodepublicacion.

(3) El principio utilizado en este lugar se corresponde con el planteamiento explicado anteriormente. En este punto se crean las anclas necesarias. Aquí también se hace uso del elemento de HTML <a>.

El resultado:

<html>
    <body>
        <h2>Índice</h2>
        <a href="#1905">Der Panther</a>                (2)
        <br />
        <a href="#1799">Zauberlehrling</a>             (2)
        <br />
        <a href="#1945">Moritat von Mackie Messer</a>  (2)
        <br />
        <a href="#1890">!</a>                          (2)
        <br />
        <a href="#-750">Ιλιάδα</a>                     (2)
        <br />
        <br />
        <h4>Rainer Maria Rilke</h4>
        <h2>
            <a name="1905" />Der Panther</h2>Im Jardin des Plantes, Paris <p>Sein Blick ist vom Vorübergehn der Stäbe<br />so müd geworden, daß er nichts mehr ält.<br />Ihm ist, als ob es tausend Stäbe gäbe<br />und hinter tausend Stäben keine Welt.<br />             (3)
        </p>
...

El resultado en la vista del navegador:

Vista del navegador

<< 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