En XSLT, ¿cómo se prueba para ver si existe una variable?

Cuando usa XSLT, ¿cómo prueba para ver si existe una variable de ámbito local, o esto es posible?

Teniendo en cuenta la hoja de estilos XSLT como DOM XML, un elemento de statement variable hace que la variable sea visible para todos los hermanos siguientes y sus descendientes. Esto permite a los procesadores XSLT analizar estáticamente cualquier XPath que contenga una referencia de variable para ver si existe la variable; si la statement de variable existe en el eje hermano anterior o antecesor, la referencia de la variable es legal, de lo contrario no lo es.

Tenga en cuenta que esto depende completamente de la estructura del XSLT, no de la estructura del XML que está procesando. El procesador XSLT puede y debe producir un error si una expresión XPath usa una variable que no existe.

No hay forma de verificar esta condición dentro de XSLT porque esta condición no es legal dentro de XSLT. La situación que describió en su comentario: “La idea es establecer una variable de indicador si se genera algo y luego mostrar un mensaje diferente si no se emitió nada”. – en realidad debería dar como resultado un error de syntax. Por ejemplo, si haces algo como esto:

  true     

condition1 is true

condition2 is true

condition3 is true

This only gets emitted if $output got set to some non-empty value.

Hacer esta pregunta indica que no comprendiste del todo el punto clave de XSLT. 🙂

Es declarativo: nada puede existir a menos que lo declares. Usted declara una variable, luego está allí, no, entonces no lo es.

Ni una sola vez habrá un punto en el que tenga que preguntarse, mientras codifica, si existe una cierta variable.

XSLT tiene reglas estrictas de scope, las variables existen solo dentro del scope de su elemento padre (y no todos los elementos pueden contener variables para empezar). Una vez que abandonas el elemento padre, la variable desaparece.

Entonces, a menos que especifiques tu pregunta / intención un poco más, la única respuesta válida es que la pregunta es incorrecta. No puede y no necesita verificar si existe una variable en tiempo de ejecución.

Las variables XSL tienen un ámbito estricto, por lo que no puede acceder a ellas en los nodos hermanos, solo en los niños. Si está tratando con params, puede usar un global.

Ver: http://www.stylusstudio.com/xsllist/199911/post30020.html

No creo que sea posible, pero es probable que nunca lo necesites, porque la variable no existe a menos que la hayas declarado.

Si tiene una variable, puede verificar si tiene algo o si “existe” haciendo algo como lo siguiente:

   This variable exists!   The variable doesn't exist :(   

En cuanto a su validez, no puedo estar seguro. Sin embargo, les diré que hago esto en algunos de nuestros sistemas en el trabajo;)

La mejor y más rápida idea para comprobar si Walue existe es verificar su longitud

   

En cualquier lenguaje de progtwigción, tendrás exactamente el mismo comportamiento.

Tomar c#. Intentar hacer referencia a un nombre de variable no declarada da como resultado un mensaje de error. Esto es definitivamente un error del progtwigdor.

¿Por qué sería necesario que XSLT se comporte de una manera diferente ?

En cuanto a pensar en “antes” y “más tarde”, o sobre una variable que tendría más de un valor para denotar en qué “estado” estamos – esto no está permitido en XSLT por definición – y exactamente el la ausencia de tales “características” es lo que hace que XSLT sea el lenguaje funcional agradable y elegante que es.