['#']
和[.='#']
之间究竟有什么区别?是否有任何区别?
例如以下表达式:
<xsl:template match="a/@href[.='#']">...</xsl:template>
<xsl:template match="a/@href['#']">...</xsl:template>
答案 0 :(得分:3)
谓词过滤器,如果包含的表达式不为真。 [.='#']
测试当前上下文(.
)的字符串内容是否等于#
,因此第一个模板将返回@href
等链接的所有<a href="#">...</a>
属性。
第二个模板不包含布尔语句,也不是数字(因此它将是位置测试)。它将由boolean
函数给出评估:
功能:
boolean boolean(object)
布尔函数将其参数转换为布尔值,如下所示:
- 当且仅当它既不是正数也不是负数时,数字为真 零也不是NaN
- 当且仅当它是非空的
时,节点集才为真- 当且仅当其长度为非零
时,该字符串为真- 将四种基本类型以外的类型的对象转换为a 布尔值依赖于该类型的方式
这里,我们有一个非空字符串,其有效布尔值为true
,因此第二个模板中的谓词永远不会过滤任何内容。
另一方面,//a[@href]
中的谓词将过滤包含@href
属性的所有链接(此处,我们会过滤节点集)。