it-swarm.com.de

Wie erstelle ich einen Booleschen Wert?

Ich bin völlig neu in XSLT und kann mit dem folgenden Code nicht herausfinden, wo ich falsch liege.

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

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

Es ist immer wieder wahr, wenn es falsch sein soll. Warum?

82
sydlawrence

Der Wert der Variablen $ var wie in definiert:

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

ist

true()

Dies liegt daran, dass "false" in XPath eine gewöhnliche Zeichenfolge ist, im Gegensatz zu false(), dem Konstruktor für den boolean -Wert false().

Die zwei Booleschen Werte in XPath sind (beachten Sie, dass sie konstruiert sind!):

true() und false()

Die Details zum Konvertieren eines Werts in einen Booleschen Wert werden in XPath Spec : geschrieben.

"Die Funktion boolean wandelt ihr Argument wie folgt in einen Booleschen Wert um:

  • eine Zahl ist nur dann wahr, wenn sie weder eine positive noch eine negative Null noch eine NaN ist

  • eine Knotenmenge ist genau dann wahr, wenn sie nicht leer ist

  • ein String ist genau dann wahr, wenn seine Länge nicht Null ist

  • ein Objekt eines anderen Typs als der vier Grundtypen wird in einer von diesem Typ abhängigen Weise in einen Booleschen Wert konvertiert. "

In Ihrem Fall ist die Zeichenfolge "false" nicht die Zahl 0 und hat eine positive Länge. Daher wird die Regel im dritten Aufzählungszeichen angewendet, die true() ergibt.

Definieren Sie daher eine Variable in XSLT 1.0, deren Wert false() ist. , muss man die Definition wie folgt schreiben:

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

oder wenn Sie sich nicht genau daran erinnern, können Sie immer schreiben:

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

(Geben Sie einen beliebigen Ausdruck an, der mit false() ausgewertet wird.) Der XSLT-Prozessor erledigt die Arbeit für Sie.

In XSLT 2.0 ist es immer besser, den Typ der Variablen explizit anzugeben:

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

164

Die von Ihnen verwendete Funktion boolean () erledigt tatsächlich ihre Aufgabe. Zur Verwendung expliziter wahrer und falscher Werte sollten Sie die folgenden Funktionen verwenden:

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

Nur zu Ihrer Information: Gemäß MSDN-Dokumentation gibt boolean () Folgendes zurück:

  • Wenn das Argument eine negative oder positive Zahl ist, wird es in den Booleschen Wert true konvertiert.
  • Wenn das Argument Null oder ein NaN-Wert ist, wird es in false konvertiert.
  • Wenn das Argument eine nicht leere Knotenmenge ist, wird es in true konvertiert. Ein leerer Knotensatz wird in false konvertiert.
  • Wenn das Argument eine nicht leere Zeichenfolge ist, wird es in true konvertiert. Eine leere Zeichenfolge wird in false konvertiert.
  • Wenn das Argument ein Objekt eines anderen Typs als der vier Basistypen ist, wird es in einer von diesem Typ abhängigen Weise in einen Booleschen Wert konvertiert.
17
Yuval Adam

Ein bisschen spät in dieser Phase vielleicht, aber im Umgang mit Booleschen ist die Mühe einfach nicht wert. Hier ist, wie ich mit einem Booleschen (Obligatorischen) aus der DB umgegangen bin:

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

Hoffe das hilft jemandem

5
outofcoolnames