Как создать булеву стоимость?

Я полностью плохо знаком с XSLT и не могу разработать, где я иду не так, как надо со следующим кодом.

<xsl:variable name="var" select="boolean('false')"/>

<xsl:if test="$var'">variable is true</xsl:if>

Это всегда возвращает true, когда это предназначено, чтобы быть ложью. Почему?

83
задан Dimitre Novatchev 30 June 2019 в 20:28
поделиться

2 ответа

Значение переменной $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"/>

(определяют любое выражение, которое оценивает к [1 112]) и процессор XSLT сделает работу для Вас.

В XSLT 2.0 всегда лучше явно определить тип переменной:

      <xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>

165
ответ дан Dimitre Novatchev 24 November 2019 в 08:48
поделиться

Булевская переменная () функция, которую Вы используете, действительно делает, это - задание. Для использования явных истинных и ложных значений необходимо использовать следующие функции:

<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>

Просто к вашему сведению, на документация MSDN , булевская переменная () возвращает следующее:

  • , Если аргументом является отрицательное или положительное число, он преобразовывается в верное булево значение.
  • , Если аргументом является нуль или значение NaN, это преобразовывается в ложь.
  • , Если аргументом является непустой набор узлов, он преобразовывается в истинный. Пустой набор узлов преобразовывается в ложь.
  • , Если аргументом является непустая строка, он преобразовывается в истинный . Пустая строка преобразовывается в ложь.
  • , Если аргументом является объект типа кроме этих четырех основных типов, он преобразовывается в булевскую переменную способом, которая зависит от того типа.
17
ответ дан Yuval Adam 24 November 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: