['#']和[。='#']之间的区别究竟是什么?

时间:2014-02-17 14:04:59

标签: xpath

['#'][.='#']之间究竟有什么区别?是否有任何区别?

例如以下表达式:

<xsl:template match="a/@href[.='#']">...</xsl:template>
<xsl:template match="a/@href['#']">...</xsl:template>

1 个答案:

答案 0 :(得分:3)

谓词过滤器,如果包含的表达式不为真。 [.='#']测试当前上下文(.)的字符串内容是否等于#,因此第一个模板将返回@href等链接的所有<a href="#">...</a>属性。

第二个模板不包含布尔语句,也不是数字(因此它将是位置测试)。它将由boolean函数给出评估:

  

功能boolean boolean(object)

     

布尔函数将其参数转换为布尔值,如下所示:

     
      
  • 当且仅当它既不是正数也不是负数时,数字为真   零也不是NaN
  •   
  • 当且仅当它是非空的
  • 时,节点集才为真   
  • 当且仅当其长度为非零
  • 时,该字符串为真   
  • 将四种基本类型以外的类型的对象转换为a   布尔值依赖于该类型的方式
  •   

这里,我们有一个非空字符串,其有效布尔值为true,因此第二个模板中的谓词永远不会过滤任何内容。


另一方面,//a[@href]中的谓词将过滤包含@href属性的所有链接(此处,我们会过滤节点集)。