['#'][.='#']到底有什么区别?有什么区别吗?

例如以下表达式:



<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/

10-12 02:32