1. ホーム
  2. xml

[解決済み] ブーリアン値を作成するには?

2023-05-26 20:36:52

質問

私は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()

任意の値をbooleanに変換する詳細については XPath Spec .:

"その ブーリアン 関数は次のように引数をbooleanに変換します。

  • 数値が真であるのは、それが が正または負のゼロでない場合 でもNaNでもない場合

  • ノードセットが真であるのは、それが が空でない場合のみ

  • 文字列が真であるのは、その 長さが0でない場合のみ

  • 4つの基本型以外の型のオブジェクトは、その型に依存した方法でbooleanに変換される "になります。

あなたの場合、文字列 "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()"/>