XSL - Anidar un for-each dentro de otro

 
Vista:

Anidar un for-each dentro de otro

Publicado por Nicolas (1 intervención) el 25/04/2018 14:55:15
Estimados

Junto con saludarlos, deseo poder mostrar por medio de un XSLT mi XML, el cual tiene nodos repetitivos y dentro de ese nodo hay otro nodo repetitivo, lo cual no he podido resolverlo a desconocimiento del lenguaje XSL. Tanto Equipo como MantencionPreventivaPerdiodo son nodos repetibles, dentro de mi XSLT pude repetir Equipo pero no MantencionPreventivaPerioro, no se si es posible realizar tal funcionamiento

File: Data.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0"?>
<Producto>
	<Equipo Id="0">
       	  <EquipoMarca Id="0">Epson</EquipoMarca>
          <EquipoModelo Id="0">i940</EquipoModelo>
          <EquipoSerie Id="0">789456123</EquipoSerie>
          <EquipoMantencionPreventiva Id="0">
            <MantencionPreventivaTope Id="0">4</MantencionPreventivaTope>
            <MantencionPreventivaPeriodo Id="0">
              <Fecha Id="0">2018/05</Fecha>
            </MantencionPreventivaPeriodo>
            <MantencionPreventivaPeriodo Id="0">
              <Fecha Id="0">2018/06</Fecha>
            </MantencionPreventivaPeriodo>
            <MantencionPreventivaPeriodo Id="0">
              <Fecha Id="0">2018/07</Fecha>
            </MantencionPreventivaPeriodo>
            <MantencionPreventivaPeriodo Id="0">
              <Fecha Id="0">2018/08</Fecha>
            </MantencionPreventivaPeriodo>
          </EquipoMantencionPreventiva>
    </Equipo>
</Producto>

File: Transform.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
<html xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0">
  <head>
    <title>Lista de productos</title>
  </head>
  <body>
    <table>
      <tr>
        <th>Marca equipo</th>
        <th>Modelo equipo</th>
        <th>Serie equipo</th>
        <th>Tope mantencion preventiva</th>
        <th>Periodo</th>
      </tr>
      <xsl:for-each select="Producto/Equipo">
        <tr>
          <td><xsl:value-of select="EquipoMarca"/></td>
          <td><xsl:value-of select="EquipoModelo"/></td>
          <td><xsl:value-of select="EquipoSerie"/></td>
          <td><xsl:value-of select="EquipoMantencionPreventiva/MantencionPreventivaTope"/></td>
          <td><xsl:value-of select="EquipoMantencionPreventiva/MantencionPreventivaTope/Fecha"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
</html>
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

Mostrar nodos repetitivos en XSLT

Publicado por Alejandro (227 intervenciones) el 07/07/2023 18:37:43
Para mostrar los nodos repetitivos dentro de tu XML utilizando XSLT, debes utilizar otro bucle `xsl:for-each` para iterar sobre los nodos hijos repetitivos. A continuación se muestra cómo puedes modificar tu archivo XSLT para lograrlo:

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
<html xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0">
  <head>
    <title>Lista de productos</title>
  </head>
  <body>
    <table>
      <tr>
        <th>Marca equipo</th>
        <th>Modelo equipo</th>
        <th>Serie equipo</th>
        <th>Tope mantencion preventiva</th>
        <th>Periodo</th>
      </tr>
      <xsl:for-each select="Producto/Equipo">
        <tr>
          <td><xsl:value-of select="EquipoMarca"/></td>
          <td><xsl:value-of select="EquipoModelo"/></td>
          <td><xsl:value-of select="EquipoSerie"/></td>
          <td><xsl:value-of select="EquipoMantencionPreventiva/MantencionPreventivaTope"/></td>
          <td>
            <!-- Agrega otro bucle para iterar sobre los nodos MantencionPreventivaPeriodo -->
            <xsl:for-each select="EquipoMantencionPreventiva/MantencionPreventivaPeriodo">
              <xsl:value-of select="Fecha"/>
              <xsl:if test="position() != last()">, </xsl:if> <!-- Agrega una coma entre cada Fecha -->
            </xsl:for-each>
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
</html>

Con esta modificación, el XSLT iterará sobre los nodos repetitivos `Equipo` y dentro de cada uno, iterará sobre los nodos repetitivos `MantencionPreventivaPeriodo` para mostrar las fechas correspondientes. Las fechas se mostrarán separadas por comas.

Esta solución te permitirá mostrar los nodos repetitivos y sus valores dentro de tu XML utilizando XSLT. Puedes aplicar este enfoque a otras consultas similares que involucren nodos repetitivos en tus futuros desarrollos XSLT.
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