<xsl:variable name="test" select="1"/>
XSLT =選択
と<xsl:variable name="test" select="'1'"/>
の違いは何ですか?
結果が両方とも結果の断片であれば..基本的に上記2行のコードは同じですか?
もしそうなら、どのように使用するかを決めるにはどうすればよいですか?
<xsl:variable name="test" select="1"/>
XSLT =選択
と<xsl:variable name="test" select="'1'"/>
の違いは何ですか?
結果が両方とも結果の断片であれば..基本的に上記2行のコードは同じですか?
もしそうなら、どのように使用するかを決めるにはどうすればよいですか?
最初のサンプルでは、数値が1の変数を作成し、2番目の変数は文字列値が「1」の文字列型の変数を作成します。結果ツリーフラグメントはコードサンプルでは作成されません。これは<xsl:variable name="test">1</xsl:variable>
で行われます。
@Martinが指摘したように、最初の変数は変数を数値にバインドし、2番目の変数は文字列にバインドします。
どのように使用するのですか?あなたがその変数で行います使用の
と思います。たとえば、あなたが行うことができるようになります最初のケースでは:あなたがnumber()
機能を使用しない限り
item[$test]
これは、後者の場合にはできません。
以下のコメントに従って、文字列または数値は、比較演算子のいずれかを使用しても差異がありません。ノードセットやrtfsと比較しても。これをスペック(少し冗長)で読んだり、愚かなテストを試したりすることができます。
ノードの位置を扱うときに得られるさまざまな動作は、依然として明白です。たとえば、あなたが持っている場合:
<root>
<test>a</test>
<test>b</test>
</root>
使用することにより:
<xsl:value-of select="/root/test[$rtf2]"/>
<xsl:value-of select="/root/test[$string2]"/>
<xsl:value-of select="/root/test[$number2]"/>
はあなたが取得します:
aab
<xsl:variable name="number2" select="2"/>
<xsl:variable name="string2" select="'2'"/>
<xsl:variable name="rtf2">2</xsl:variable>
、あなたがこのような入力を持っていますこれは、
<xsl:value-of select="/root/test[position()=$rtf2]"/>
<xsl:value-of select="/root/test[position()=$string2]"/>
<xsl:value-of select="/root/test[$number2]"/>
返します。
bbb
による比較演算子によって引き起こされる暗黙の変換に。
XPath 1.0とXSLT 1.0は、数字と文字列をかなり互換性があり、ほとんど例外なく扱います。注目すべき例外はitem [$ test]です。しかし、 "="はやや異なった動作をします:数字4と数字04は同じですが、文字列としては違います。
XPath 2.0およびXSLT 2では、0型システムははるかに豊富であり、文字列と数値の違いははるかに目立つ。数字で定義された多くの演算は文字列では機能しないし、逆もまた同様である。
どのように決定するのですか?それがすべて数字である場合は、電話番号のようなものでない限り、通常は数字を使用することになります。先行ゼロが重要なので、実際に数字ではなく文字列です。
XSLT 1.0では、比較演算子 '> 'がオペランドを数値に変換するので、どちらの場合でも' nodeset> $ test'を実行できます。 –
真。それを反映して更新されました。スペックとの違いを把握するのは難しいです。 –