ancestor轴选取当前节点所有祖先节点(不含自身),ancestor-or-self包含自身;常与谓词、位置索引、属性匹配联用,结果按文档顺序排列。
XPath 中用 ancestor 轴可以选中当前节点的所有祖先节点(即父节点、祖父节点、曾祖父节点……直到根节点),不包括自己。
格式为:axis::node-test,其中 ancestor 是轴名,node-test 用来筛选祖先节点的类型或名称。
//div/ancestor::*:选取所有 div 元素的所有祖先节点(任意元素)//input/ancestor::form:只选取 input 的 form 类型祖先(最近的 form 及其更上层的 form,如果嵌套多层)//span/ancestor::*[1]:选取 span 的直接父节点(第一个祖先)ancestor 不包含当前节点;而 ancestor-or-self 包含当前节点本身。
//p/ancestor::div → 只找 p 上面的 div 祖先//p/ancestor-or-self::div → 如果 p 自己就是 div,也会被选中;否则等同于 ancestor::div
经常和谓词 []、位置索引、属性匹配一起使用:
//button[@id='submit']/ancestor::div[@class='modal']:找 ID 为 submit 的 button 所
在的、class 为 modal 的 div 祖先//a/ancestor::*[position() :取 a 的前三个祖先(父、祖父、曾祖父)//img/ancestor::article:快速定位图片所在的 article 容器(常用于内容提取)ancestor 轴返回的是从**直接父节点开始,向上到根节点的路径上的所有匹配节点**,顺序是自近到远(即父节点在前,根节点在后)。但 XPath 1.0 中结果顺序是文档顺序(从上到下),实际使用中建议用 [1] 或 last() 明确取值,避免依赖默认顺序。
不复杂但容易忽略。