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

如何解决Jsoup解析HTML后标签转义导致无法查找元素的问题?

解决Jsoup解析含自定义标签HTML时标签被转义的问题

问题重现

你的原始HTML内容:

<html> <title><s:message code="test" /></title> </html>

用默认Jsoup解析代码:

String input = readFileAsString(filePath); 
Document doc = Jsoup.parse(input); 
Elements messageEls = doc.select("s|message");

解析后<title>里的<s:message>被转义成了&lt;s:message code="test" /&gt;,导致无法通过select找到目标元素。

原因分析

Jsoup默认的HTML解析器严格遵循HTML规范:<title>元素的内容属于纯文本范畴,其中的特殊字符(比如<、>)会被自动转义为HTML实体,避免被误判为HTML标签。但你的场景里,<title>内是Struts自定义标签,这不符合标准HTML结构,所以默认解析逻辑不适用。

解决方案:使用XML解析模式

Jsoup提供了XML解析器,它会把整个内容当作XML文档处理,不会转义元素内的标签字符,能正确识别自定义标签。修改代码如下:

String input = readFileAsString(filePath);
// 使用XML解析器替代默认HTML解析器
Document doc = Jsoup.parse(input, "", Parser.xmlParser());
Elements messageEls = doc.select("s|message");

这样解析后,<s:message code="test" />会被当作一个合法的XML元素,你就能通过select("s|message")正常获取到它了。

补充说明

如果你的内容大部分是标准HTML,只有局部包含自定义标签,也可以先提取<title>的文本内容,再对这段文本单独用XML解析器处理,但这种方式不如直接用全局XML解析简洁高效,推荐优先使用前者。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:31