XPath路径表达式


1、术语:

  节点(Node):7种类型:元素,属性,文本,命名空间,处理命令,注释,文档(根)节点

?2、节点关系:

  父(Parent),子(Children),同胞(Sibling),先辈(Ancestor),后代(Descendant)

3、路径表达式

  nodename  节点名,选取此节点的所有子节点  例: childnode  当前节点中的childnode子节点,不包含孙子及以下的节点

  /     从根节点选取  例:/root/childnode/grandsonnode

  //     表示所有后代节点  例://childnode    所有名为childnode的后代节点

  .    表示当前节点  例:  ./childnode    表示当前节点的childnode节点

  ..     表示父节点  例:  ../nearnode     表示父亲节点的nearnode子节点

  @    选取属性  /root/childnode/@id     表示childnode的所有含有id属性的节点集

4、谓语(Predicates)

  谓语可以对节点集进行一些限制,使选择更精确

  /root/book[1]    节点集中的第一个节点

  /root/book[last()]  节点集中最后一个节点

  /root/book[position() - 1]  节点集中倒数第二个节点集

  /root/book[position() < 5]  节点集中前五个节点集

  /root/book[@id]      节点集中含有属性id的节点集

  /root/book[@id='chinese']  节点集中id属性值为chinese的节点集

  /root/book[price > 35]/title  节点集中book的price元素值大于35的title节点集

5、通配符:

  XPath路径中同样支持通配符(*,@*,node(), text())

  例:  /bookstore/*

  //title[@*]

6、XPath轴

  定义相对于当前节点的节点集

  ancestor    所有祖先节点

  attribute    所有属性节点

  child      所有子元素

  descendant  所有后代节点(子,孙。。。)

  following    结束标记后的所有节点      preceding   开始标记前的所有节点

  following-sibling  结束标记后的所有同胞节点

  preceding-sibling  开始标记前的所有同胞节点

  namespace   当前命名空间的所有节点

  parent     父节点

  self       当前节点

  用法:轴名称::节点测试[谓语]

  例:  ancestor::book

  child::text()

7、运算符

  |  两个节点集的合并  例:/root/book[1] | /root/book[3]

  +,-,*,dev,mod

  =,!=,<,>,<=,>=

  or,and  或和与

  多个属性条件查询      //div[@align='center' and @height='24']

  不存在class属性       //div[not(@class)]

7、方法

//选择不包含class属性的节点
var result = node.SelectNodes(".//span[not(@class)]");
//选择不包含class和id属性的节点
var result = node.SelectNodes(".//span[not(@class) and not(@id)]");
//选择不包含class="expire"的span
var result = node.SelectNodes(".//span[not(contains(@class,'expire'))]");
//选择包含class="expire"的span
var result = node.SelectNodes(".//span[contains(@class,'expire')]");