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