['#']
和[.='#']
到底有什么区别?有什么区别吗?
例如以下表达式:
<xsl:template match="a/@href[.='#']">...</xsl:template>
<xsl:template match="a/@href['#']">...</xsl:template>
最佳答案
如果所包含的表达式不正确,则谓词过滤。 [.='#']
测试当前上下文(.
)的字符串内容是否等于#
,因此第一个模板将为@href
之类的链接返回所有<a href="#">...</a>
属性。
第二个模板不包含布尔语句,也不是数字的(因此将是位置测试)。将根据boolean
函数给出的值进行评估:
功能:boolean boolean(object)
布尔函数将其参数转换为布尔值,如下所示:
当且仅当它既不是正数也不是负数时,数字才为真
零也不是NaN
当且仅当节点集为非空时,节点集才为true
当且仅当其长度为非零时,字符串才为true
四种基本类型以外的其他类型的对象将转换为
布尔值取决于该类型
在这里,我们有一个带有有效布尔值true
的非空字符串,因此,第二个模板中的谓词将永远不会过滤任何内容。
另一方面,像//a[@href]
中的谓词将过滤所有包含@href
属性的链接(此处,我们过滤节点集)。
关于xpath - ['#']和[。='#']之间到底有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21831148/