XPath轴定义节点间导航关系,用于精确定位XML/HTML元素;常见轴包括child::、parent::、ancestor::、descendant::、following-sibling::、preceding-sibling::、self::和attribute::,常与谓语结合提升选择精度。

XPath中的轴(Axes)定义了节点之间的导航关系,它用来确定当前节点的上下文位置,并帮助选择与该节点相关联的其他节点。通过轴,可以更精确地定位XML或HTML文档中的元素,实现比简单层级路径更灵活的节点选取。
轴的基本作用
轴指明了节点的遍历方向。例如,是从父节点找子节点,还是从子节点回溯到祖先节点。每个轴代表一个特定的节点集合,这些集合根据文档结构和当前节点的位置动态生成。
常见的轴包括:- child:: 选择当前节点的直接子节点(默认轴)
- parent:: 选择当前节点的父节点
- ancestor:: 选择当前节点的所有祖先节点(包括父、祖父等)
- descendant:: 选择当前节点的所有后代节点(包括子、孙等)
- following-sibling:: 选择当前节点之后的同级节点
- preceding-sibling:: 选择当前节点之前的同级节点
- self:: 表示当前节点自身
- attribute:: 选择当前节点的属性节点(可简写为@)
如何实现更灵活的选择
使用轴可以突破从根到叶的线性路径限制,支持基于相对位置和语义关系的复杂查询。
实际应用示例:- 查找某个标题下方的所有段落:
//h2/following-sibling::p - 选择具有特定类名的祖先容器:
//input/ancestor::div[@class='form-group'] - 获取当前元素的前一个兄弟元素:
//li[@id='current']/preceding-sibling::li[1] - 筛选拥有某个属性的父元素:
//span[@lang]/parent::*[attribute::id]
结合谓语提升精度
轴通常与谓语(用方括号[]表示)配合使用,进一步过滤结果。谓语可以包含条件表达式,如位置、属性值或文本内容判断。
例如:-
//ul/descendant::li[3]:选择ul下第3个li后代 -
//table/ancestor::div[position()=1]:选择最近的一个div祖先 -
//a/parent::*[name()='p']:选择包裹a标签的p元素
基本上就这些。轴让XPath不再局限于静态路径匹配,而是能像“地图导航”一样在文档树中多方向移动,极大增强了选择能力。掌握常用轴及其组合方式,就能应对大多数复杂的节点定位需求。










