Значення змінної $ var, як визначено у:
<xsl:variable name="var" select="boolean('false')"/>
є
true()
Це тому, що в XPath " false
" є звичайним рядком, на відміну від false()
, який є конструктором boolean
значенняfalse()
Два логічні значення в XPath є (зверніть увагу, що вони побудовані!):
true()
і false()
Деталі перетворення будь-якого значення в логічне значення прописані в специфікації XPath .:
" Логічна функція перетворює свій аргумент у логічну форму таким чином:
число є істинним тоді і лише тоді, коли воно не є ні позитивним, ні негативним нулем, ні 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()"/>