xslt在select =“1”或select =“'1'之间进行选择

时间:2011-06-29 10:52:41

标签: xslt

<xsl:variable name="test" select="1"/>

之间有什么区别?

<xsl:variable name="test" select="'1'"/>

如果两个结果都是结果tre片段..所以基本上上面两行代码是相同的吗?

如果是这样的话。我们如何决定使用哪个?

3 个答案:

答案 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中,类型系统更丰富,字符串和数字之间的差异更加明显:许多在数字上定义的操作不适用于字符串,反之亦然。

如何决定?如果它是全数字的,你通常会想要使用一个数字,除非它类似于电话号码,前导零是重要的,因此它不是一个数字而是一串数字。