O valor da variável $ var conforme definido em:
<xsl:variable name="var" select="boolean('false')"/>
é
true()
Isso ocorre porque no XPath " false
" é uma string comum, ao contrário de false()
, que é o construtor do boolean
valorfalse()
Os dois valores booleanos em XPath são (observe que eles são construídos!):
true()
e false()
Os detalhes da conversão de qualquer valor em booleano são descritos nas especificações XPath .:
"A função booleana converte seu argumento em um booleano da seguinte maneira:
um número é verdadeiro se e somente se não for zero positivo ou negativo nem NaN
um conjunto de nós é verdadeiro se e somente se não estiver vazio
uma string é verdadeira se e somente se seu comprimento for diferente de zero
um objeto de um tipo diferente dos quatro tipos básicos é convertido em um booleano de uma forma que depende desse tipo "
No seu caso, a string "false" não é o número 0 e tem um comprimento positivo, então a regra do terceiro marcador acima é aplicada, rendendo true()
.
Portanto, para definir uma variável em XSLT 1.0, cujo valor é false()
, é necessário escrever a definição da seguinte forma:
<xsl:variable name="vMyVar" select="false()"/>
ou, se você não se lembra exatamente disso, você pode escrever:
<xsl:variable name="vMyVar" select="1 = 0"/>
(especifique qualquer expressão que avalie como false()
) e o processador XSLT fará o trabalho para você.
Em XSLT 2.0, é sempre melhor especificar explicitamente o tipo da variável:
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>