XSL - distinct-values

 
Vista:

distinct-values

Publicado por Alicia (1 intervención) el 24/01/2006 14:17:25
Hola.
Estoy probando a introducir una condición que me muestre un determinado campo cuando se cumpla que los valores de una tabla (las filas) son distintos, pero no me sale. El codigo es como véis:

<xsl:if test="distinct-values(AQUI EL ATRIBUTO)">

Por favor que alguien me dé alguna idea.

Un saludo.
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 un campo cuando los valores de una tabla son distintos

Publicado por Alejandro (227 intervenciones) el 05/07/2023 19:57:57
Si deseas mostrar un campo solo cuando los valores de una tabla son distintos, puedes utilizar la función `distinct-values()` en una condición dentro de un `<xsl:if>`. Sin embargo, debes tener en cuenta que la función `distinct-values()` solo está disponible en XSLT 2.0 o versiones superiores. En XSLT 1.0, no existe una función equivalente directa.

Aquí tienes una solución que funciona en XSLT 2.0:

1
2
3
4
5
6
7
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:if test="count(distinct-values(tabla/fila/campo)) > 1">
      <!-- Código para mostrar el campo -->
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

En este ejemplo, estamos utilizando la función `distinct-values()` dentro de la condición del `<xsl:if>`. La expresión `distinct-values(tabla/fila/campo)` devuelve una secuencia de valores únicos encontrados en los campos de la tabla. Luego, comparamos el recuento de esa secuencia con el valor `1` para verificar si hay más de un valor distinto.

Si estás trabajando con XSLT 1.0 y no tienes acceso a funciones como `distinct-values()`, una alternativa sería realizar una comparación manual de los valores utilizando `<xsl:for-each>` y una variable para almacenar el primer valor encontrado. Aquí tienes un ejemplo:

1
2
3
4
5
6
7
8
9
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:variable name="firstValue" select="tabla/fila[1]/campo"/>
 
    <xsl:if test="tabla/fila[not(campo = $firstValue)]">
      <!-- Código para mostrar el campo -->
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

En este caso, estamos utilizando una variable llamada `$firstValue` para almacenar el primer valor encontrado en los campos de la tabla. Luego, comparamos cada campo con ese valor utilizando el operador `=` dentro del `<xsl:if>`. Si se encuentra un valor distinto, se ejecuta el código para mostrar el campo.

Espero que estas soluciones te sean útiles para mostrar un campo cuando los valores de una tabla son distintos, tanto en XSLT 2.0 como en XSLT 1.0. ¡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