xml - w3schools - video html title




Как создать логическое значение? (2)

Значение переменной $ var, как определено в:

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

является

true()

Это связано с тем, что в XPath « false » является обычной строкой, а не false() , которая является конструктором для boolean значения false()

Два булевых значения в XPath (обратите внимание, что они построены!):

true() и false()

Деталь преобразования любого значения в boolean записывается в спецификации XPath :

« boolean функция преобразует свой аргумент в логическое значение следующим образом:

  • число истинно тогда и только тогда, когда оно не является ни положительным, ни отрицательным нулем, ни NaN

  • набор узлов является истинным тогда и только тогда, когда он не пуст

  • строка истинна тогда и только тогда, когда ее длина не равна нулю

  • объект типа, отличный от четырех основных типов, преобразуется в логическое значение, которое зависит от этого типа "

В вашем случае строка «false» не является числом 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()"/>

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

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

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

Он всегда возвращает true, когда он должен быть ложным. Зачем?


Немного поздно на этом этапе, возможно, но 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>

Надеюсь, это поможет кому-то





boolean