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

如何使用JSoup移除HTML中两个不同标签之间的指定文本?

使用JSoup移除指定标签间及标签后的文本

我来给你说说怎么用JSoup搞定这个需求,核心就是精准定位目标标签,然后移除它们之间和之后的多余文本节点,同时保留标签本身和内部内容。直接上具体实现方案:

实现思路

  1. 解析目标HTML文档,定位到包含<strong>和<em>的上下文元素;
  2. 精准找到要保留的<strong>和<em>标签;
  3. 移除<strong>与<em>之间的所有兄弟节点(这里是文本节点);
  4. 移除<em>之后的所有兄弟节点;
  5. 输出处理后的HTML内容。

代码实现

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;

public class JsoupTextCleanup {
    public static void main(String[] args) {
        // 你的目标HTML字符串
        String html = "<div class=\"orcl6w2\"> <div class=\"orcl6w3\"> <table > <tbody> <tr> <td> <table> <tbody> <tr> <td> <center> <strong>As Published In </strong> </center> </td> </tr> </tbody> </table> <h2>DEVELOPER: PL/SQL Practices</h2> <hr /> <strong>Steven Feuerstein </strong>This has to be deleted <em>Oracle PL/SQL Programming</em>This has to be deleted too. </td></tr></tbody></table></div></div>";
        
        // 1. 解析HTML文档
        Document doc = Jsoup.parse(html);
        
        // 2. 定位目标<strong>元素(这里用内容匹配,你也可以根据层级/class调整选择器)
        Element targetStrong = doc.select("strong:contains(Steven Feuerstein)").first();
        if (targetStrong == null) {
            System.out.println("未找到目标<strong>元素");
            return;
        }
        
        // 3. 移除<strong>到<em>之间的所有节点
        Node currentNode = targetStrong.nextSibling();
        while (currentNode != null) {
            // 找到<em>元素就停止遍历
            if (currentNode instanceof Element && ((Element) currentNode).tagName().equals("em")) {
                break;
            }
            // 先存下下一个节点,再删除当前节点
            Node nextNode = currentNode.nextSibling();
            currentNode.remove();
            currentNode = nextNode;
        }
        
        // 4. 移除<em>之后的所有节点
        if (currentNode != null) {
            Node afterEmNode = currentNode.nextSibling();
            while (afterEmNode != null) {
                Node nextNode = afterEmNode.nextSibling();
                afterEmNode.remove();
                afterEmNode = nextNode;
            }
        }
        
        // 5. 输出处理后的HTML
        System.out.println(doc.html());
    }
}

关键说明

  • 选择器定位:示例中用strong:contains(Steven Feuerstein)精准匹配目标<strong>,如果你的HTML结构更复杂,可以结合父元素的class或层级(比如div.orcl6w3 strong)来避免匹配错误。
  • 节点遍历:JSoup的nextSibling()会返回所有类型的节点(文本、元素、注释等),所以我们通过判断节点类型来找到<em>元素,中途的非<em>节点全部移除。
  • 鲁棒性处理:代码里加了targetStrong == null的判断,避免找不到目标标签时出现空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:46:19