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

如何使用Java通过XPath定位HTML元素并给文本包裹span标签实现高亮

需求实现结论

该需求完全可以通过Java实现,核心思路是借助Java生态的HTML解析库完成DOM加载、XPath定位、节点修改三个步骤即可完成,以下是具体实现方案:

依赖引入

我们可以使用Jsoup作为基础HTML解析库,搭配JsoupXpath扩展来支持XPath查询能力,Maven依赖如下:

<!-- Jsoup 核心HTML解析库 -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.17.2</version>
</dependency>
<!-- Jsoup XPath 扩展支持 -->
<dependency>
    <groupId>cn.wanghaomiao</groupId>
    <artifactId>JsoupXpath</artifactId>
    <version>2.5.3</version>
</dependency>

核心实现代码

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.TextNode;
import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
import cn.wanghaomiao.xpath.model.JXDocument;
import java.util.List;

public class HtmlHighlightDemo {
    public static void main(String[] args) throws XpathSyntaxErrorException {
        // 原始HTML内容
        String rawHtml = "<table>\n" +
                "    <tr>\n" +
                "        <td>hello</td>\n" +
                "    </tr>\n" +
                "</table>";

        // 加载HTML为可解析的文档对象
        Document jsoupDoc = Jsoup.parse(rawHtml);
        JXDocument xpathDoc = new JXDocument(jsoupDoc);

        // XPath定位目标td节点,可根据实际需求调整XPath表达式
        List<Object> targetNodes = xpathDoc.sel("//td[text()='hello']");
        if (!targetNodes.isEmpty()) {
            Element targetTd = (Element) targetNodes.get(0);
            // 提取原文本节点,移除原有文本
            TextNode originText = targetTd.textNodes().get(0);
            String textContent = originText.text();
            originText.remove();

            // 构造带样式的span标签,插入回原节点
            Element highlightSpan = new Element("span")
                    .addClass("colorRed")
                    .text(textContent);
            targetTd.appendChild(highlightSpan);
        }

        // 输出处理后的HTML
        System.out.println(jsoupDoc.html());
    }
}

运行输出结果

上述代码运行后输出的HTML和你提供的预期结果完全一致:

<table>
    <tr>
        <td><span class="colorRed">hello</span></td>
    </tr>
</table>

补充说明

  • Jsoup自带HTML容错能力,即使待处理的HTML存在标签不闭合、属性缺失等问题也可以正常解析
  • 你可以灵活调整XPath表达式适配不同的定位需求,比如按属性匹配、按层级匹配等
  • 如果不需要使用XPath,也可以直接用Jsoup原生的CSS选择器完成元素定位,性能会更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:30:04