Frage

Ich bin völlig neu für XSLT und kann aus nicht arbeiten, wo ich mit dem folgenden Code werde falsch.

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

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

Es ist immer Rückkehr wahr, wenn es gemeint ist falsch. Warum?

War es hilfreich?

Lösung

Der Wert des $ var Variable wie definiert in:

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

ist

true()

Dies liegt daran, in XPath „false“ ein gewöhnlicher String ist, false() im Gegensatz, was der Konstruktor für die boolean Wert false() ist

Die zwei Boolesche Werte in XPath sind (beachten Sie, dass sie aufgebaut sind!):

true() und false()

Das Detail einen beliebigen Wert der Umwandlung nach boolean werden die XPath Spec Dinkel outin .

"Die boolean Funktion konvertiert ihr Argument wie folgt zu einem boolean:

  • eine Zahl ist wahr, wenn und nur wenn es weder positive oder negative Null noch NaN

  • ein Knoten-Satz ist wahr, wenn und nur wenn es nicht leer

  • ein String ist wahr, wenn und nur dann, wenn sein Länge ungleich Null

  • ein Objekt von einem anderen Typ als die vier Grundtypen in einer Art und Weise in einen Booleschen umgewandelt, der auf dieser Art abhängen „

In Ihrem Fall die Zeichenfolge „false“ ist nicht die Zahl 0 und hat eine positive Länge, so dass die Regel in der dritten Kugel oben angewandt wird, true() erhalten wird.

daher eine Variable in XSLT 1.0, dessen Wert

Andere Tipps

Die Funktion Boolean () Sie verwenden in der Tat tut es die Aufgabe. Für explizite wahre und falsche Werte verwenden, sollten Sie die folgenden Funktionen zur Verfügung:

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

Just FYI, pro MSDN-Dokumentation , boolean () gibt folgende Möglichkeiten:

  • Wenn das Argument eine negative oder positive Zahl ist, um es in dem Boolesche Wert true umgewandelt wird.
  • Wenn das Argument null oder ein NaN Wert ist, wird es auf false umgewandelt.
  • Wenn das Argument eine nicht leere Knotenmenge ist, wird es in true umgewandelt. Eine leere Knotenmenge umgewandelt wird auf false gesetzt.
  • Wenn das Argument eine nicht leere Zeichenfolge ist, wird es in true umgewandelt . Eine leere Zeichenkette wird auf false umgewandelt.
  • Wenn das Argument ein Objekt von einem anderen Typ als die vier Grundtypen ist, es in einen Booleschen in einer Weise umgewandelt wird, die auf diese Art abhängig ist.

Ein bisschen in diesem Stadium spät vielleicht, aber imo mit booleans zu tun ist einfach nicht die Mühe wert. Heres, wie ich mit einem boolean (Mandatory) behandelt von der DB Rückweg:

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

Hope, das hilft jemand

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top