El test
especificado en <xsl:if>
obras como si se llama a la función boolean
. Esta función no funciona de la manera que podrías pensar. Si su argumento se evalúa como un conjunto de nodos (que será si usa una ruta como argumento), devolverá verdadero si el conjunto de nodos no está vacío y de lo contrario es falso. Entonces, efectivamente, estás probando la existencia de un elemento, no su valor. Si foo
contiene false
,
<xsl:if test="/path/to/foo">
siempre será evaluada como verdadera, ya que lo que realmente está pidiendo en esa prueba es "qué existe este elemento?" y no "¿el valor del elemento es verdadero?" Y el elemento existe.
La regla de que los valores booleanos deben estar true
, false
, 1
o 0
es una parte del esquema XML (which see) y no XPath, que no sabe nada acerca de esta regla. (XPath 1.0, es decir, XPath 2.0/XQuery 1.0 tiene the fn:boolean
function, que hace inteligente, es decir, consciente del esquema XML, evaluación de valores booleanos). Para determinar si un valor es verdadero en XSLT, debe verificarlo explícitamente:
<xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">
¿puede por favor publicar su expresión XPath actual con un fragmento XML? –
Esto no es una pregunta en absoluto. Por favor, den un ejemplo específico: ¿cuál es exactamente la expresión XPath y cuál es el archivo XML (el más simple posible, por favor) en el que se evalúa esta expresión XPath? –
Prefiero ver un ejemplo, supongo que hay un pequeño error en la sintaxis. –