XSL - dividir tablas en xsl

 
Vista:

dividir tablas en xsl

Publicado por soledad (1 intervención) el 07/10/2008 13:19:05
Hola!!

Tengo un problema con una tabla en xsl ya que necesito dividirla en registros, es decir, yo desconozco el número de registros que contiene y necesito que cada 10 registros se muestren en una página distínta. ¿cómo puedo ir cogiendo de 10 en 10 registros dentro de la tabla?.

Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

División de registros de tabla en páginas cada 10 registros

Publicado por Alejandro (227 intervenciones) el 06/07/2023 21:57:21
Para resolver tu problema y todas las consultas relacionadas que puedas tener en el futuro, te sugiero utilizar una combinación de XSLT y HTML para generar las páginas de manera dinámica. Aquí tienes una solución para dividir los registros de la tabla en páginas cada 10 registros:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!-- Template principal -->
<xsl:template match="/">
  <html>
    <body>
      <xsl:apply-templates select="tabla/registro"/>
    </body>
  </html>
</xsl:template>
 
<!-- Template para cada registro -->
<xsl:template match="tabla/registro">
  <!-- Comprobamos si es el primer registro de una página -->
  <xsl:if test="position() mod 10 = 1">
    <!-- Si es el primer registro, abrimos una nueva página -->
    <xsl:if test="position() > 1">
      </table> <!-- Cerrar la tabla de la página anterior -->
    </xsl:if>
    <h1>Página <xsl:value-of select="(position() - 1) div 10 + 1"/></h1>
    <table>
  </xsl:if>
 
  <!-- Generar el contenido del registro -->
  <tr>
    <td><xsl:value-of select="campo1"/></td>
    <td><xsl:value-of select="campo2"/></td>
    <!-- Añadir más campos según sea necesario -->
  </tr>
 
  <!-- Comprobamos si es el último registro de una página -->
  <xsl:if test="position() mod 10 = 0 or position() = last()">
    </table> <!-- Cerrar la tabla de la página actual -->
  </xsl:if>
</xsl:template>

En este ejemplo, asumimos que tienes una estructura XML con un elemento `<tabla>` que contiene múltiples elementos `<registro>`, y cada `<registro>` tiene campos como `<campo1>`, `<campo2>`, etc. El código XSLT generará páginas HTML separadas, donde cada página contendrá hasta 10 registros.

El código utiliza el operador `mod` para determinar si un registro es el primero (`position() mod 10 = 1`) o el último (`position() mod 10 = 0`) de una página. Al encontrarse con un primer registro, se abre una nueva página HTML (`<h1>Página...</h1>` y `<table>`) y se cierra la página anterior (si existe). Luego, se generan los elementos de registro en la tabla.

Ten en cuenta que este es solo un ejemplo básico para ilustrar el concepto de división de registros en páginas. Puedes ajustar y personalizar el código según tus necesidades específicas, como añadir estilos CSS, encabezados de página, etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar