XSL - filtrar tabla usando un parametro solicitado al usuario

 
Vista:
sin imagen de perfil

filtrar tabla usando un parametro solicitado al usuario

Publicado por fernando (1 intervención) el 04/03/2014 13:30:05
Hola a todos, os escribo porque quiero terminar un proyecto y estoy atascado,

resulta que tengo un archivo xml y otro xsl, en el xsl cargo una tabla con todos los datos del xml, hasta aquí todo bien, el problema es el siguiente, no quiero que se muestren todos los datos, solo los que cumplan una condición, aqui vamos bien, ya que lo controlo con un xsl:if y lo que no consigo que esa condición sea un valor solicitado al usuario (ya sea por un textbox o por msgbox, o lo que sea), para hacer pruebas me he creado la variable:

<xsl:variable name="name" select= "1234" />

y en el if hago esto:

<xsl:if test="@nombre=$name"> ........... </xsl:if>

Vale, así funciona y solo me muestra los datos cuyo nombre sea 1234. Pero yo necesito que esa variable sea un dato introducido por teclado, por lo que solo se me ocurre hacerlo en javascript, por lo que me hago una función javascript, por último la estoy haciendo así:

msxsl:script language="JavaScript" implements-prefix ="js">
<![CDATA[
function prueba()
{
var mensaje = "1234";
return mensaje;
}
]]>
</msxsl:script>

y luego la intento asignar a la variable xsl así:

<xsl:variable name="name" select= "js:prueba()" />

pero no funciona, he probado así:

<xsl:variable name="name" select= js:prueba() />

así:

<xsl:variable name="name" select= "$js:prueba()" />

así:

<xsl:variable name="name" select= prueba() />

y un largo etc, y me suele dar errores o de:

Error al cargar la hoja de estilo: El procesamiento de una hoja de estilo XSLT ha fallado.

o

Error durante la transformación XSLT: Se ha llamado a una función de extensión XPath desconocida.

Llevo días y no doy con la tecla y no me creo que no se pueda hacer, no puedo usar php ni lenguajes similares ya que donde se va a ejecutar no hay esos recursos, ¿alguna idea?

Muchas gracias por adelantado.
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

Filtrado dinámico de datos XML basado en entrada del usuario

Publicado por Alejandro (227 intervenciones) el 07/07/2023 16:13:48
Para lograr el filtrado dinámico de datos XML basado en la entrada del usuario en XSLT, necesitarás combinar XSLT con JavaScript de manera adecuada. A continuación, te presento una solución que puedes seguir:

1. Define una función JavaScript en tu archivo XSLT: Utiliza el elemento `<msxsl:script>` para definir una función JavaScript que se encargará de recibir la entrada del usuario y devolver el valor deseado. Por ejemplo:

1
2
3
4
5
6
7
8
<msxsl:script language="JavaScript" implements-prefix="custom">
  <![CDATA[
    function getUserInput() {
      var input = prompt("Ingrese el valor a filtrar:");
      return input;
    }
  ]]>
</msxsl:script>

En este ejemplo, la función `getUserInput()` utiliza la función `prompt()` de JavaScript para mostrar un cuadro de diálogo y obtener la entrada del usuario.

2. Utiliza la función JavaScript en la variable XSLT: Dentro de tu archivo XSLT, declara una variable y utiliza la función JavaScript para asignarle el valor ingresado por el usuario. Por ejemplo:

1
<xsl:variable name="name" select="custom:getUserInput()" />

Aquí, la variable `$name` se asigna con el valor devuelto por la función `getUserInput()`.

3. Aplica el filtrado utilizando la variable: Utiliza la variable `$name` en tu condición de filtrado utilizando un `<xsl:if>` o cualquier otro elemento de control de flujo de XSLT. Por ejemplo:

1
2
3
<xsl:if test="@nombre = $name">
  <!-- Aquí se encuentran las acciones que deseas realizar para los datos filtrados -->
</xsl:if>

Asegúrate de colocar este código dentro del contexto apropiado dentro de tu archivo XSLT.

4. Realiza la transformación XSLT: Utiliza un procesador XSLT para aplicar la transformación desde el archivo XML al archivo HTML resultante. Puedes utilizar herramientas como Saxon o librerías JavaScript como Saxon-JS.

Ten en cuenta que la compatibilidad con las funciones y elementos de extensión de XSLT puede variar dependiendo de la implementación XSLT que estés utilizando. Por lo tanto, es importante verificar la documentación de tu procesador XSLT específico para confirmar que admite la incorporación de funciones JavaScript.

Recuerda adaptar este ejemplo a tu estructura XML y a tus necesidades específicas. Si encuentras algún error o comportamiento inesperado, verifica la compatibilidad del procesador XSLT y realiza las correcciones necesarias.

Espero que esta solución te ayude a implementar el filtrado dinámico de datos XML basado en la entrada del usuario utilizando XSLT y JavaScript. ¡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