You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XPath轴中child、following与descendant的区别及descendant用法示例

嘿,我来帮你理清这三个XPath轴的区别,先纠正下你之前对::following轴的小误解,再详细讲::descendant,最后用一个简单的HTML例子对比三者~

三个XPath轴的定义与区别对比

1. 先明确::descendant轴的定义

::descendant轴会选中当前节点的所有后代节点——也就是直接子节点、子节点的子节点(孙节点)、更深层级的节点,直到叶子节点,简单说就是当前节点下面所有层级的子节点(不包括当前节点自己)。

2. 用示例对比三个轴

先给一个简单的HTML结构,我们以这个结构里的<div id="parent">作为当前节点来演示:

<div id="parent">
  <p>直接子段落</p>
  <div id="child">
    <span>孙节点span</span>
    <a href="#">孙节点链接</a>
  </div>
  <h2>另一个直接子标题</h2>
</div>
<p>父节点外的段落</p>

::child轴

  • 定义:只选中当前节点的直接子节点(紧挨着当前节点的下一级节点,不会深入更下层)。
  • XPath示例://div[@id='parent']::child::*
  • 选中的节点:
    • <p>直接子段落</p>
    • <div id="child">...</div>
    • <h2>另一个直接子标题</h2>
  • 核心特点:只看一级子节点,范围最窄。

::descendant轴

  • 定义:选中当前节点的所有后代节点(直接子节点、孙节点、曾孙节点等,所有层级的子节点都包含)。
  • XPath示例://div[@id='parent']::descendant::*
  • 选中的节点:
    • <p>直接子段落</p>
    • <div id="child">...</div>
    • <span>孙节点span</span>
    • <a href="#">孙节点链接</a>
    • <h2>另一个直接子标题</h2>
  • 核心特点:覆盖当前节点下的所有子层级,范围比::child大很多。

::following轴(纠正你的理解)

你之前对这个轴的理解有点偏差哦——它不是用来选子节点的,而是:

  • 定义:选中文档顺序中当前节点之后的所有非后代节点(也就是在当前节点的闭合标签</div>之后出现的节点,完全不属于当前节点的后代树)。
  • XPath示例://div[@id='parent']::following::*
  • 选中的节点:
    • <p>父节点外的段落</p>
  • 核心特点:和当前节点的后代完全无关,只看文档流里当前节点结束之后的外部节点。

3. 快速对比总结

轴名称选择范围核心特点
::child当前节点的直接子节点(仅下一级)只看一级,范围最小
::descendant当前节点的所有后代节点(所有层级子节点)覆盖所有子层级,范围中等
::following文档顺序中当前节点之后的非后代节点和后代无关,只看节点之后的外部节点

内容的提问来源于stack exchange,提问作者Pratiksha Jadhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:48:40