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

XPath使用following::*获取数据重复,如何获取ul内非重复文本?

解决XPath抓取嵌套标签文本重复的问题

你的问题出在following::*会匹配目标节点之后的所有元素节点,包括容器节点(如<ul>)和它的所有子节点(<li>、<a>等),每个节点的文本都会被单独返回,自然会出现重复。要获取<ul>内的完整无重复文本,按以下方法处理:

方法1:直接定位目标容器节点并提取文本

放弃遍历所有后续节点,直接定位到你要的<ul>节点,再提取它的完整文本:

  • 如果你知道目标<ul>是某个标签的同级后续节点,用following-sibling轴更精准:
    //前置标签的定位表达式/following-sibling::ul[1]/string()
    
    比如前置标签是<h3>,内容为"列表标题":
    //h3[text()='列表标题']/following-sibling::ul[1]/string()
    
  • 如果你需要去除多余的换行、空格,用normalize-space()包裹:
    normalize-space(//h3[text()='列表标题']/following-sibling::ul[1])
    

方法2:限制following轴的匹配范围

如果一定要用following轴,必须明确只匹配目标<ul>节点,而非所有后续元素:

//前置标签的定位表达式/following::ul[1]

然后提取该节点的文本,而不是遍历所有following::*的子节点。

原理说明

following::*会选中目标节点之后的所有层级的元素,包括<ul>本身、它的子<li>、<li>里的<a>等,每个节点的text()都会被单独返回,导致同一内容多次出现。而直接定位到<ul>节点后用string(),会获取该节点及其所有子节点的完整拼接文本,不会拆分重复返回。

举个HTML示例:

列表标题

用//h3/following-sibling::ul[1]/string()会返回完整文本:第一项 链接文本第二项(保留原始格式),用normalize-space()则会整理为:第一项 链接文本 第二项。

内容的提问来源于stack exchange,提问作者Q With Only

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:42:19