Xpath 是W3C制定的用来在XML文档中进行导航和查询的路径表达语句,可以在XML文档层次结构中的相关元素节点及内容进行检索和定位。
xpath的绝对路径为/step1/step2,相对路径为step1/step2/step3 .
xpath是有 / 和step组成,/表示进行下一步的step的开始,而step表示按照当前/提供的路径进行的寻找操作。
step由三个部分组成: 轴坐标符:: 节点测试 【判定谓词】
轴坐标符 AxisSpecifier 表示从当前路径向什么方向进行寻找。:共有13种:
1.ancestor 查找当前路径节点的所有祖先节点
2.ancestor-or-self 查找所有祖先节点和自己
3. attribute 查找当前节点的属性
4:child 查找所有子节点
5. descendant 查找所有后代节点
6.descendant-or-self 查找所有后代节点加自己
7.following 查找当前节点之后的所有节点,之后的节点是指节点的开始标记在当前节点的结束标记之后的节点。
8.following-sibling 查找之后的兄弟节点
9.namespace 查找节点的命名空间
10.parent 当前节点的父节点
11.preceding 当前节点之前的所有节点
12.preceding-sibling 当前节点之前的兄弟节点
13.self 节点自己。
节点测试 NodeTest 对节点进行或名称类型测试,取对应要求名称或类型的节点
//node() 是查找容易节点 //book 是查找容易名字叫book‘的节点
判定谓词 Predicate 使用[]包含,可以调用一些函数来判断是否符合一定的要求
string()将内容转换为字符串
string-length()返回字符串长度或者当前节点的字符串长度
contains(string1,string2)判断string1中是否含有string2
starts-with(string1,string2) string1是否以string2为开头
ends-with(string1,string2) string1是否以string2为结尾
matches(string,pattern) string是否匹配对应的正则表达式
name() 返回当前节点的名称
local-name() 返回当前节点的名称 不带命名空间
root() 返回文档节点即根节点
empty() 判断是否为空
exists() 判断是否存在
cout(....) 返回节点的数量
avg(),max(),min(),sum() 分别是 取 属 性 的平均值,最大值,最小值和 和。
position() 返回节点的位置 /book[3]这里是缩写,其实是[position()=3]的判定。position()是从1开始计数的。
last() 返回当前处理的节点序列的数量 //book[last()] 为返回最后一个book
xpath中的一些常用缩写:
无 表示默认的child::寻找子节点
@ 表示attribute::
. 表示self::node()即当前节点
.. 表示parent::node()即父节点
// 表示/descend-or self::node()/即所有子孙节点和自己的子节点
作业中的几个实例:
1.查找所有非最外层的section元素:
//section//section /descendant-or-self::node()/section/descendant-or-self::node()/section /descendant-or-self::node()/section//section
2.查找只包含三个子孙section元素(包括所有后代section)的section元素;
//section[count(descendant::section)=3] //section[count(descendant-or-self::section)=4]
3.查找出id属性为intro,title元素中包含字符串“Web”的section元素的父节点。
//section[@id="intro"][matches(./title/text(),"Web")]/parent::* //section[@id="intro"]/title[matches(text(),"Web")]/parent::*/parent::* /descendant-or-self::node()/section[@id="intro"][matches(./title/text(),"Web")]/parent::*