Как создать логическое значение?
Я совершенно новичок в XSLT и не могу понять, где я ошибаюсь со следующим кодом.
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
Он всегда возвращает true, когда он должен быть ложным. Зачем?
3 ответа:
значение переменной $VAR как определено в:
<xsl:variable name="var" select="boolean('false')"/>
и
true()
это потому, что в XPath "
false
" - это обычная строка, в отличие отfalse()
, который является конструктором дляboolean
стоимостьюfalse()
два логических значения в XPath являются (обратите внимание, что они построены!):
true()
иfalse()
детали преобразования любого значения в логическое прописаны в XPath Spec.:
" The boolean функция преобразует свой аргумент в логическое следующим образом:
число истинно тогда и только тогда, когда оно ни положительный или отрицательный нуль ни Нэн
набор узлов истинен тогда и только тогда, когда он есть непустой
строка истинна тогда и только тогда, когда ее длина не равна нулю
объект типа, отличного от четырех основных типов, преобразуется в логическое значение способом, зависящим от этого типа "
в вашем случае строка "false" не является числом 0 и имеет положительную длину, поэтому применяется правило в 3-м пуле выше, давая
true()
.поэтому, чтобы определить a переменная в 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()"/>
функция boolean (), которую вы используете, действительно выполняет свою работу. Для использования явных значений true и false следует использовать следующие функции:
<xsl:variable name="var_false" select="false()"/> <xsl:variable name="var_true" select="true()"/>
просто FYI, за Примечание, boolean () возвращает следующее:
- если аргумент является отрицательным или положительным числом, он преобразуется в логическое значение true.
- если аргумент равен нулю или значению NaN, он преобразуется в false.
- если аргумент является непустым набором узлов, он преобразуется в true. Пустой набор узлов преобразуется в false.
- если аргумент является непустой строкой, он преобразуется в true. Пустая строка преобразуется в false.
- если аргумент является объектом типа, отличного от четырех основных типов, он преобразуется в логическое значение способом, зависящим от этого типа.
немного поздно на этом этапе, возможно, но imo, занимающийся булевыми значениями, просто не стоит усилий. Вот как я справлялся с логическим (обязательным) возвращением из БД:
<xsl:variable name="vTrue" select="true()"/> <xsl:choose> <xsl:when test="string(Mandatory) = string($vTrue)"> <xsl:text>Mandatory</xsl:text> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose>
надеюсь, это поможет кому-то