XSL - 2 problemas con XSL

 
Vista:

2 problemas con XSL

Publicado por Tate (1 intervención) el 14/02/2008 11:59:38
Quiero hacer un listado a partir de un xml utilizando xsl, hasta aqui todo va muy bien, la cosa se complica puesto que he creado una tabla con tres columnas y tantas filas como contenga el xml. La cuestión radica en el xsl en el cual existe un condicional, mediante el cual cada vez que se repita un valor cambie el fondo de la celda de color, pero no se como conseguirlo lo mas que he alcanzo a sacar es colocar el texto del color que quiero.

Condicional en cuestión:
<td>
<xsl:if test="departamento[.='Publicidad']">
<b><font color="#FF0000"><xsl:value-of select="departamento"/></font></b>
</xsl:if>
</td>

Solo pondo el código del problema en cuestión. En el ejemplo sólo consigo ponerlo en bold y de color rojo (o el color que yo quiera).

Y por último como podría sintetizar el siguiente código, ya que el apartado departamento puede llegar a ser bastante extenso:

<xsl:for-each select="*/listado">
<tr>
<td><div align="center">
<xsl:if test="departamento[.='Publicidad']">
<b><font color="#FF0000"><xsl:value-of select="departamento"/></font></b>
</xsl:if>
<xsl:if test="departamento[.='Producción']">
<b><font color="#FF00FF"><xsl:value-of select="departamento"/></font></b>
</xsl:if>
<xsl:if test="departamento[.='Técnicos']">
<b><font color="#0000FF"><xsl:value-of select="departamento"/></font></b>
</xsl:if>
</div></td>
<td><xsl:value-of select="nombre"/></td>
<td><div align="center"><xsl:value-of select="telefono"/></div></td>
</tr>
</xsl:for-each>

Si me podeis echar una mano os lo agradecería mucho.

Saludos, Tate
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

Cambiar el fondo de la celda de una tabla según un condicional

Publicado por Alejandro (227 intervenciones) el 06/07/2023 19:47:31
Para cambiar el fondo de la celda de una tabla en función de un condicional en XSL, puedes utilizar la propiedad `background-color` de CSS. Aquí tienes un ejemplo de cómo 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
<xsl:template match="/">
  <table>
    <xsl:for-each select="*/listado">
      <tr>
        <td>
          <xsl:attribute name="style">
            <xsl:if test="departamento[.='Publicidad']">
              background-color: #FF0000;
            </xsl:if>
            <xsl:if test="departamento[.='Producción']">
              background-color: #FF00FF;
            </xsl:if>
            <xsl:if test="departamento[.='Técnicos']">
              background-color: #0000FF;
            </xsl:if>
          </xsl:attribute>
          <xsl:value-of select="departamento"/>
        </td>
        <td><xsl:value-of select="nombre"/></td>
        <td><xsl:value-of select="telefono"/></td>
      </tr>
    </xsl:for-each>
  </table>
</xsl:template>

En este ejemplo, hemos utilizado el atributo `style` para aplicar el estilo CSS `background-color` a la celda de la tabla. Dentro de cada condicional, hemos asignado el valor de `background-color` correspondiente según el departamento.

Recuerda adaptar los valores de los colores y los departamentos de acuerdo a tus necesidades. También puedes utilizar clases CSS en lugar de estilos en línea para una mayor organización y flexibilidad.

En cuanto a la sintetización del código, puedes utilizar una estructura `choose` y `when` para simplificar la lógica de los condicionales. Aquí tienes un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<xsl:template match="/">
  <table>
    <xsl:for-each select="*/listado">
      <tr>
        <td>
          <xsl:choose>
            <xsl:when test="departamento[.='Publicidad']">
              <xsl:attribute name="style">background-color: #FF0000;</xsl:attribute>
            </xsl:when>
            <xsl:when test="departamento[.='Producción']">
              <xsl:attribute name="style">background-color: #FF00FF;</xsl:attribute>
            </xsl:when>
            <xsl:when test="departamento[.='Técnicos']">
              <xsl:attribute name="style">background-color: #0000FF;</xsl:attribute>
            </xsl:when>
          </xsl:choose>
          <xsl:value-of select="departamento"/>
        </td>
        <td><xsl:value-of select="nombre"/></td>
        <td><xsl:value-of select="telefono"/></td>
      </tr>
    </xsl:for-each>
  </table>
</xsl:template>

En este caso, hemos utilizado la estructura `choose` y `when` para evaluar diferentes condiciones y asignar el estilo correspondiente a la celda.

Espero que esta solución te ayude a cambiar el fondo de la celda de una tabla según un condicional en XSL. ¡Buena suerte con tu proyecto!
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