XSL - Me gustaría corregir este código

 
Vista:

Me gustaría corregir este código

Publicado por Miguel (1 intervención) el 01/05/2015 10:00:41
Hola muy buenas tengo la siguiente estructura de código y de 20 filas tan solo me sale la primera ponga como lo ponga, y la cosa es que tengo la misma estructura pero con diferentes etiquetas en otro xml y me va perfectamente, me gustaría a ver si me pudierais ayudar. Antes de que digáis nada el fallo no está en el XML.

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
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>Escaños</h2>
<table border="1">
<tr bgcolor="#DFDFDF">
	<th>Partido</th>
	<th>Logo</th>
	<th>Escaños</th>
</tr>
<xsl:for-each select="//escrutinio_sitio">
<xsl:choose>
 <xsl:when test="//electos &gt;= 20">
 <tr bgcolor="#01DF01">
 <td><xsl:value-of select="//nombre"/></td>
 <td></td>
  <td><xsl:value-of select="//electos"/></td>
 </tr>
 </xsl:when>
 
  <xsl:when test="(//electos &lt; 20) and (//electos &gt; 0)">
 <tr bgcolor="#01DF01">
 <td><xsl:value-of select="//nombre"/></td>
 <td></td>
  <td><xsl:value-of select="//electos"/></td>
 </tr>
 </xsl:when>
 <xsl:otherwise>
  <tr bgcolor="#01DF01">
 <td><xsl:value-of select="//nombre"/></td>
 <td></td>
  <td><xsl:value-of select="//electos"/></td>
 </tr>
 </xsl:otherwise>
 </xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
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

Consulta de escaños

Publicado por Alejandro (227 intervenciones) el 07/07/2023 17:30:11
El problema en tu código XSL parece estar relacionado con la forma en que estás seleccionando y mostrando los valores de las etiquetas en el XML. Parece que estás utilizando las rutas de acceso absolutas en lugar de usar la referencia relativa al contexto actual.

Por ejemplo, en lugar de utilizar "//nombre" para seleccionar el valor de la etiqueta "nombre", debes utilizar "nombre" dentro del contexto del bucle "xsl:for-each". Esto asegurará que estás seleccionando el valor correcto para cada fila.

Aquí tienes una versión corregida del código:

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
50
51
52
53
54
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
    <html>
      <body>
        <h2>Escaños</h2>
        <table border="1">
          <tr bgcolor="#DFDFDF">
            <th>Partido</th>
            <th>Logo</th>
            <th>Escaños</th>
          </tr>
          <xsl:for-each select="//escrutinio_sitio">
            <xsl:choose>
              <xsl:when test="electos &gt;= 20">
                <tr bgcolor="#01DF01">
                  <td>
                    <xsl:value-of select="nombre"/>
                  </td>
                  <td></td>
                  <td>
                    <xsl:value-of select="electos"/>
                  </td>
                </tr>
              </xsl:when>
              <xsl:when test="electos &lt; 20 and electos &gt; 0">
                <tr bgcolor="#01DF01">
                  <td>
                    <xsl:value-of select="nombre"/>
                  </td>
                  <td></td>
                  <td>
                    <xsl:value-of select="electos"/>
                  </td>
                </tr>
              </xsl:when>
              <xsl:otherwise>
                <tr bgcolor="#01DF01">
                  <td>
                    <xsl:value-of select="nombre"/>
                  </td>
                  <td></td>
                  <td>
                    <xsl:value-of select="electos"/>
                  </td>
                </tr>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Con esta corrección, deberías poder ver todas las filas correspondientes a los elementos "escrutinio_sitio" que cumplen con las condiciones especificadas en el código XSL.
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