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 gibt immer wahr zurück, wenn es falsch sein soll. Warum?
Antworten:
Der Wert der Variablen $ var wie definiert in:
<xsl:variable name="var" select="boolean('false')"/>
ist
true()
Dies liegt daran, dass in XPath "
false
" im Gegensatz zu " " eine gewöhnliche Zeichenfolge istfalse()
, die der Konstruktor für denboolean
Wert istfalse()
Die zwei booleschen Werte in XPath sind (beachten Sie, dass sie konstruiert sind!):
true()
undfalse()
Die Details zum Konvertieren eines Werts in einen Booleschen Wert sind in der XPath- Spezifikation aufgeführt :
"Die boolesche Funktion konvertiert ihr Argument wie folgt in einen booleschen Wert:
Eine Zahl ist genau dann wahr, wenn sie weder eine positive oder negative Null noch NaN ist
Ein Knotensatz ist genau dann wahr, wenn er nicht leer ist
Ein String ist genau dann wahr, wenn seine Länge ungleich 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 obigen dritten Aufzählungszeichen angewendet und ergibt
true()
.Um eine Variable in XSLT 1.0 zu definieren, deren Wert lautet
false()
, muss die Definition daher wie folgt geschrieben werden:<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 Ausdruck an, der ausgewertet wird
false()
), und 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()"/>
quelle
false
undtrue
Zeichenfolgen, die aus der zu transformierenden Datei stammen und keinen Zeichenfolgenvergleich beinhalten?Die von Ihnen verwendete Funktion boolean () erledigt tatsächlich ihre Aufgabe. Um explizite wahre und falsche Werte zu verwenden, sollten Sie die folgenden Funktionen verwenden:
Nur zu Ihrer Information, gemäß der MSDN-Dokumentation gibt boolean () Folgendes zurück:
quelle
Ein bisschen spät in dieser Phase vielleicht, aber imo Umgang mit Booleschen ist einfach nicht die Mühe wert. Hier ist, wie ich mit einem Booleschen Wert (Obligatorisch) umgegangen bin, der von der DB zurückgekommen ist:
Hoffe das hilft jemandem
quelle