<xsl:variable name="test" select="1"/>
和<xsl:variable name="test" select="'1'"/>
?
如果两个结果都是结果tre片段..所以基本上上面两行代码是相同的吗?
如果是这样的话。我们如何决定使用哪个?
答案 0 :(得分:2)
第一个样本创建一个数字类型的变量,数字值为1,第二个样本创建一个string类型的变量,字符串值为“1”。不会使用您的代码示例创建结果树片段,这可以通过<xsl:variable name="test">1</xsl:variable>
完成。
答案 1 :(得分:2)
正如@Martin指出的那样,第一个将变量绑定到一个数字,第二个绑定到一个字符串。
我们如何决定使用哪个?
想一想您将对该变量使用。例如,在第一种情况下,您将能够:
item[$test]
除非您使用number()
功能,否则在第二种情况下无法实现。
根据以下注释,使用任何比较运算符时,字符串或数字不会有任何区别。甚至在与节点集或rtfs进行比较时。您可以在规格上阅读(有点冗长)或尝试一些愚蠢的测试。
在处理节点位置时,您可以获得的不同行为仍然是显而易见的。例如,如果您有:
<xsl:variable name="number2" select="2"/>
<xsl:variable name="string2" select="'2'"/>
<xsl:variable name="rtf2">2</xsl:variable>
你有这样的输入:
<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:value-of select="/root/test[position()=$rtf2]"/>
<xsl:value-of select="/root/test[position()=$string2]"/>
<xsl:value-of select="/root/test[$number2]"/>
将返回:
bbb
由于比较运算符导致的隐式转换。
答案 2 :(得分:1)
XPath 1.0和XSLT 1.0将数字和字符串视为几乎可以互换,只有极少数例外。一个值得注意的例外是item [$ test]。但是“=”的行为也略有不同:因为数字4和04是相等的,但是作为字符串它们不是。
在XPath 2.0和XSLT 2.0中,类型系统更丰富,字符串和数字之间的差异更加明显:许多在数字上定义的操作不适用于字符串,反之亦然。
如何决定?如果它是全数字的,你通常会想要使用一个数字,除非它类似于电话号码,前导零是重要的,因此它不是一个数字而是一串数字。