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

如何用XPath获取最深层级含文本的class元素文本内容?

如何用XPath获取最深层级目标类的文本

这个需求在网页数据提取中挺常见的——目标文本可能直接在classA节点里,也可能嵌套在更深的classB节点中,我们需要精准拿到最内层那个包含文本的节点内容。

先看你的示例结构:

<?xml version="1.0" encoding="UTF-8"?>
<html>
  <td>
    <span class="classA">当classA为最深层级时的目标文本</span>
  </td>
  <td>
    <span class="classA">
      <span class="classB">当classB为最深层级时的目标文本</span>
    </span>
  </td>
</html>

核心解决方案

我们可以通过XPath的节点过滤能力,定位到没有子级目标类节点的目标节点,也就是最深层级的那个,然后提取它的文本。

1. 精确匹配class属性(适用于class属性只有单个值的情况)

使用这个XPath表达式:

//span[@class='classA' or @class='classB'][not(.//span[@class='classA' or @class='classB'])]/text()

2. 模糊匹配class属性(适用于class有多个值,比如class="classA other-class")

如果你的class属性可能包含多个值,为了避免误匹配类似classA-extra这样的节点,可以用更严谨的写法:

//span[
  contains(concat(' ', @class, ' '), ' classA ') 
  or contains(concat(' ', @class, ' '), ' classB ')
][
  not(.//span[
    contains(concat(' ', @class, ' '), ' classA ') 
    or contains(concat(' ', @class, ' '), ' classB ')
  ])
]/text()

表达式逻辑解释

  • //span[@class='classA' or @class='classB']:先筛选出所有带有classA或classB的span节点
  • [not(.//span[...])]:过滤掉那些内部还包含classA或classB子节点的元素,剩下的就是最深层级的目标节点
  • /text():提取这些最深节点的文本内容

用这个表达式跑你的示例XML,会精准得到两个结果:

  • 当classA为最深层级时的目标文本
  • 当classB为最深层级时的目标文本

内容的提问来源于stack exchange,提问作者Tomasz Wojciechowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:22:40