用于识别节点类型的XPath测试

Pat*_*rty 5 xpath types

我不明白为什么这个测试

count(.|../@*)=count(../@*) 
Run Code Online (Sandbox Code Playgroud)

(来自Dave Pawson的主页)

识别属性节点:(

有人能给我一个详细解释吗?

Tom*_*lak 7

有几点需要了解:

  1. . 指当前节点(又名"上下文节点")
  2. 属性节点有父(它所属的元素)
  3. XPath联合操作(with |)从不复制节点,即(.|.)导致一个节点而不是两个节点
  4. 还有就是self::理论上你可以使用(如轴self::*工程,以找出是否一个节点是一个元素),但self::@*不工作,所以我们必须用不同的东西

知道了,你可以说:

  • ../@* 获取当前节点的父级的所有属性(所有"兄弟属性",如果您愿意)
  • (.|../@*) 将当前节点与它们联合起来 - 如果当前节点是属性,则总计数不会改变(按照上面的#3)
  • 因此,如果count(.|../@*)等于count(../@*),则当前节点必须是属性节点.