XSL - Flipe

 
Vista:

Flipe

Publicado por lipemunoz (2 intervenciones) el 03/01/2006 13:22:21
Buenas.
Mirad, tengo un arbol xml del siguiete tipo:
<comands>
<comand>
<key>c1</key>
<num_veces>2</num_veces>
</comand>
<comand>
<key>c1</key>
<key>c7</key>
<key>c1</key>
<key>c7</key>
<num_veces>3</num_veces>
</comand>
<comand>
<key>c1</key>
<key>c7</key>
<num_veces>3</num_veces>
</comand>
</comands>

Como se puede ver puede haber un numero indeterminado de <key>, pero siempre almenos 1.
Todos tienen un <num_veces>.
Quiero dar una salida html en la que aparezca una tabla con tantas filas como <comand>
y tantas columnas como <key> más la de <num_veces>.
Además me gustaría poderle poner una cabecera a la tabla, en la que poner [tecla tecla ... tecla Numero]
Lo máximo que he conseguido es esto:
<xsl:for-each select="comand">
<tr>
<xsl:for-each select="key">
<td>
<xsl:value-of select="."/>
</td>
</xsl:for-each>
<xsl:for-each select="num_veces">
<td>
<xsl:value-of select="."/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
Pero sale la tabla descuadrada y no se poner la cabecera.
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

Generar una tabla HTML a partir de un árbol XML

Publicado por Alejandro (227 intervenciones) el 05/07/2023 19:34:20
Para generar una tabla HTML con las filas y columnas adecuadas, junto con una cabecera personalizada, puedes utilizar el siguiente código XSLT:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <head>
        <style>
          table, th, td {
            border: 1px solid black;
            border-collapse: collapse;
          }
          th, td {
            padding: 5px;
            text-align: left;
          }
        </style>
      </head>
      <body>
        <table>
          <tr>
            <!-- Cabecera personalizada -->
            <th>Tecla</th>
            <xsl:for-each select="comands/comand[1]/key">
              <th>
                <xsl:value-of select="."/>
              </th>
            </xsl:for-each>
            <th>Numero</th>
          </tr>
          <xsl:apply-templates select="comands/comand"/>
        </table>
      </body>
    </html>
  </xsl:template>
 
  <xsl:template match="comand">
    <tr>
      <!-- Columnas de teclas -->
      <td></td>
      <xsl:for-each select="key">
        <td>
          <xsl:value-of select="."/>
        </td>
      </xsl:for-each>
      <!-- Columna de número -->
      <td>
        <xsl:value-of select="num_veces"/>
      </td>
    </tr>
  </xsl:template>
</xsl:stylesheet>

En esta solución, se establece una hoja de estilo XSLT que genera una tabla HTML con las filas y columnas correspondientes a los elementos `<comand>`. La cabecera se crea en el elemento `<tr>` antes de aplicar los templates a los elementos `<comand>`.

En el código, se utiliza el elemento `<xsl:for-each>` para iterar sobre las teclas (`<key>`) del primer elemento `<comand>`. Esto permite crear las columnas correspondientes en la cabecera de la tabla.

Dentro del template `match="comand"`, se generan las filas de la tabla con las teclas y el número de veces correspondientes.

Ten en cuenta que se ha añadido también un estilo CSS en el encabezado del documento HTML generado para dar formato a la tabla.

Para aplicar la transformación, puedes utilizar un procesador XSLT como se mencionó anteriormente, ajustando el código Java según tus necesidades.

Espero que esta solución sea de ayuda para generar la tabla HTML deseada a partir de tu árbol XML. ¡Buena suerte!
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