ZucchinY

xpath 的语法主要是使用的 /name/*[]|//*[@name] 的语法规则。

  • 定位节点

节点主要是使用的 id 或者是 classname 进行匹配的,这种情况下,如果是 / 则表示找某一层,如果是 // 进行匹配,则表示是任意位置的某个层,如果用 * 则表示任意名称。

比如:/cd 是指的 classname 为 cd 的结构,而且是第一层就是 cd,如果是 //cd 则表示其中某层为 cd 但是可以不是最外层。

  • 选择分支

使用中括号可以选择分支。以下的语法从 catalog 的子元素中取出第一个叫做 cd 的元素。XPath 的定义中没有第 0 元素这种东西。而且当我们想要选取某类值的时候,可以认为 [] 中的是属性的名称,比如 //cata[@name] 是找的任意 cata 层中包含 name 属性的元素位置。

在属性之外,还有一种是索引查找方式,比如 //cata[1] 表示查找任意 cata 层中的第一个分支,这里索引是从 1 开始,而不是 0 开始,如果查找最后一个,则需要使用 cata[last()] 去找,这里只有 last() 方法,不存在 first() 方法。

如果是 [] 中的内容没有 @ 符号,又不是索引值(数字)或者是 last() 方法的话,则表示找出包含某个子元素的情况,比如 //cata/cd[pr] 表示包含 pr 的 /cata/cd 层。如果想指定元素的值,则可以在括号中增加对应的匹配 //cata/cd[pr=1.0]

| 在 xpath 中表示或者关系,即符合前面的,或者后面的内容,比如 /cata/pr | /cata/pm 两种我全要的意思。

  • 选择属性

如果某一个值是用 @ 作为开始,则表示是属性,基本的语法和层的 / 是一致的,区别是可以多个属性并存,即 /ca[@na='uu'][@nb='zz'] ,这样就是找到 cd 层中属性 na 是 uu 且 属性 nb 是 zz 的元素。

  • 特殊方法

contains(): 包含语法,比如 /ca[contains(@name,'na')] name 属性中包含 na 的元素
text(): 显示文本信息,这里对应的可以用来查询,而且进行其它操作,是对元素属性的补充
starts-with(): 开始于,比如 /ca[starts-with(@name,'na')] name 属性开始位置包含 na