私は XSLT にまったく慣れていないので、次のコードのどこが間違っているのかわかりません。
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
false であることが意図されている場合は、常に true を返します。なんで?
以下で定義されている $var 変数の値:
<xsl:variable name="var" select="boolean('false')"/>
は
true()
これは、値のコンストラクタである とはfalse
対照的に、XPath では " " が通常の文字列であるためです。false()
boolean
false()
XPath の 2 つのブール値は次のとおりです(構築されていることに注意してください!)。
true()
と false()
任意の値をブール値に変換する詳細は、XPath 仕様で詳しく説明されています。
「ブール関数は、次のように引数をブール値に変換します。
数値は、正または負のゼロでも NaN でもない場合にのみ真です。
ノードセットは、空でない場合にのみ true になります
文字列の長さがゼロでない場合に限り、文字列は真です。
4 つの基本型以外の型のオブジェクトは、その型に依存する方法でブール値に変換されます」
あなたの場合、文字列「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()"/>
使用している boolean() 関数は実際にその仕事をしています。明示的な true 値と false 値を使用するには、次の関数を使用する必要があります。
<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>
参考までに、MSDN のドキュメントによると、boolean() は以下を返します。
この段階では少し遅れているかもしれませんが、ブール値を処理するimoは努力する価値がありません。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>
これが誰かに役立つことを願っています