Значение переменной $ var, как определено в:
<xsl:variable name="var" select="boolean('false')"/>
это
true()
Это потому, что в XPath "false
" является обычной строкой, а не false()
, которая является конструктором для значения boolean
false()
Два логических значения в XPath: (обратите внимание, что они построены!):
true()
и false()
Подробности преобразования любого значения в логическое значение изложены в XPath Spec .:
"Функция логическое преобразует свой аргумент в логическое значение следующим образом:
число истинно тогда и только тогда, когда оно
не является ни положительным, ни отрицательным нулем
ни NaN
набор узлов истинен тогда и только тогда, когда он
непусто
строка истинна тогда и только тогда, когда ее
длина не равна нулю
объект типа, отличного от четырех основных типов, преобразуется в логическое значение способом, зависящим от этого типа.
«
В вашем случае строка «ложь» не является числом 0 и имеет положительную длину, поэтому применяется правило из 3-го пункта выше, что дает true()
.
Поэтому, чтобы определить переменную в XSLT 1.0, значение которой false()
, необходимо написать определение следующим образом:
<xsl:variable name="vMyVar" select="false()"/>
или, если вы точно не помните это, вы всегда можете написать:
<xsl:variable name="vMyVar" select="1 = 0"/>
(укажите любое выражение, которое оценивается как false()
), и процессор XSLT сделает всю работу за вас.
В XSLT 2.0 всегда лучше явно указать тип переменной:
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>