私は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()
これは、XPathでは「false
」が通常の文字列であり、false()
はboolean
値false()
のコンストラクターであるためです。
XPathの2つのブール値はです(構築されていることに注意してください!):
true()
およびfalse()
値をブール値に変換する詳細は、 XPath Spec .:に記述されています。
「 boolean 関数は、次のように引数をブール値に変換します。
正または負のゼロでも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()は以下を返します。
この段階では少し遅れているかもしれませんが、ブール値を扱うことは努力するだけの価値はありません。 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>
これが誰かを助けることを願っています