Hoe maak je een booleaanse waarde aan?

Ik ben helemaal nieuw bij XSLT en kan niet achterhalen waar ik de fout in ga met de volgende code.

<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>

Het retourneert altijd waar als het bedoeld is om onwaar te zijn. Waarom?


Antwoord 1, autoriteit 100%

De waarde van de $var variabele zoals gedefinieerd in:

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

is

   true()

Dit komt omdat in XPath “false” een gewone tekenreeks is, in tegenstelling tot false(), de constructor voor de booleanwaarde false()

De twee booleaanse waarden in XPath zijn(merk op dat ze geconstrueerd zijn!):

   true()en false()

De details van het converteren van een waarde naar boolean worden beschreven in de XPath-specificatie.:

“De boolean-functie zet zijn argument om naar een boolean als volgt:

  • een getal is waar als en slechts als het
    is noch positief noch negatief nul
    noch NaN

  • een node-set is waar als en slechts dan als het
    is niet leeg

  • een string is waar als en slechts als zijn
    lengte is niet nul

  • een object van een ander type dan de vier basistypen wordt geconverteerd naar een boolean op een manier die afhankelijk is van dat type

In jouw geval is de tekenreeks “false” niet het getal 0 en heeft deze een positieve lengte, dus de regel in het derde opsommingsteken hierboven wordt toegepast, wat true()oplevert.

Daarom, om een ​​variabele in XSLT 1.0 te definiëren, waarvan de waarde isfalse(), men moet de definitie als volgt schrijven:

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

of, als je dit niet meer precies weet, kun je altijd schrijven:

   <xsl:variable name="vMyVar" select="1 = 0"/>

(geef een expressie op die resulteert in false()) en de XSLT-processor zal het werk voor u doen.

In XSLT 2.0 is het altijd beter om expliciet het typevan de variabele te specificeren:

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


Antwoord 2, autoriteit 11%

De boolean()-functie die u gebruikt, doet inderdaad zijn werk. Voor het gebruik van expliciete waar en onwaar waarden moet u de volgende functies gebruiken:

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

Ter informatie, volgens de MSDN-documentatie, boolean() geeft het volgende terug:

  • Als het argument een negatief of positief getal is, wordt het geconverteerd naar de Booleaanse waarde true.
  • Als het argument nul of een NaN-waarde is, wordt het geconverteerd naar onwaar.
  • Als het argument een niet-lege node-set is, wordt het geconverteerd naar waar. Een lege node-set wordt geconverteerd naar false.
  • Als het argument een niet-lege tekenreeks is, wordt het geconverteerd naar waar. Een lege string wordt geconverteerd naar false.
  • Als het argument een object is van een ander type dan de vier basistypen, wordt het geconverteerd naar een Boolean op een manier die afhankelijk is van dat type.

Antwoord 3, autoriteit 3%

Misschien een beetje laat in dit stadium, maar imo omgaan met booleans is gewoon niet de moeite waard. Hier is hoe ik omging met een boolean (verplicht) die terugkwam uit de DB:

<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>

Ik hoop dat dit iemand helpt

Other episodes