私はXSLTにまったく慣れていないので、次のコードでどこが間違っているのか理解できません。
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
falseを意味する場合は、常にtrueを返します。どうして?
私は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仕様に詳しく説明されています。
数値が真であるのは、それが正または負のゼロでもNaNでもない場合のみです。
ノードセットは、空でない場合にのみtrueになります。
文字列は、その長さがゼロ以外の場合にのみ真になります
4つの基本タイプ以外のタイプのオブジェクトは、そのタイプに依存する方法でブール値に変換されます。
あなたの場合、文字列「false」は数値0ではなく、正の長さであるため、上記の3番目の箇条書きのルールが適用されてtrue()
。
したがって、値が false()
であるXSLT 1.0で変数を定義するには、次のように定義を記述する必要があります。
<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()"/>
false
ありtrue
ますか?
使用している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>
これが誰かを助けることを願っています