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

Jsoup解析含大量div的HTML时无法识别闭合标签的解决求助

Jsoup解析含大量绝对定位div的HTML片段时DOM结构混乱的解决办法

问题描述

我有一段包含<div style="position: relative;">容器的HTML字符串,容器内有约200个class为episode-name的div元素,示例结构如下:

<div style="position: relative;">
    <div class="episode-name" style="position: absolute; top: 5px;left: 10px;font-size: 30px;" data-id="0_0_0_0">1. Some Text</div>
    <div class="episode-name" style="position: absolute; top: 5px;left: 10px;font-size: 30px;" data-id="0_0_0_0">2. Some Text</div>
    ...
    <div class="episode-name" style="position: absolute; top: 5px;left: 10px;font-size: 30px;"data-id="0_0_0_0">200. Some Text</div>
</div>

执行Document document = Jsoup.parse(html)代码解析后,预期生成扁平化DOM结构,但实际Jsoup未识别列表元素的</div>闭合标签,生成了大量嵌套div:

<html>
 <head></head>
 <body>
  <div style="\"position:" relative;\>
   <div class="\"episode-name\"" style="\"position:" absolute; top: 5px;left: 10px;font-size: 30px;\ data-id="\"0_0_0_0\"">1. Some Unicode&lt;/div&gt;
    ...
       </div>
     </div>
   </div>
  </div>
 </body>
</html>

这导致DOM结构混乱,极大增加解析难度。请问如何让Jsoup正确解析该HTML片段?

解决办法

1. 修复原始HTML的转义与语法错误

从解析结果看,原始HTML存在两个关键问题:

  • 属性值的转义错误(比如&quot;未正确处理),导致Jsoup解析时属性格式混乱;
  • 部分标签存在语法问题(如最后一个episode-name的div中,style属性闭合引号与data-id之间无空格)。

先修正这些问题:

// 还原转义的双引号
String fixedHtml = html.replace("&quot;", "\"");
// 修复属性间缺少空格的问题
fixedHtml = fixedHtml.replace("\"data-id", "\" data-id");

2. 使用XML解析模式

如果你的HTML片段结构是严格闭合的XML格式,直接使用Jsoup的XML解析器,避免HTML解析器的容错逻辑导致的嵌套错误:

Document document = Jsoup.parse(fixedHtml, "", Parser.xmlParser());

3. 启用严格HTML解析配置

若需要使用HTML解析器,可开启严格解析模式,关闭Jsoup的容错特性:

ParseSettings strictSettings = ParseSettings.strict();
Parser strictParser = Parser.htmlParser().settings(strictSettings);
Document document = Jsoup.parse(fixedHtml, "", strictParser);

4. 验证解析结果

解析完成后,可通过以下代码验证DOM结构是否正常:

// 输出格式化后的HTML,检查结构是否扁平化
System.out.println(document.body().html());
// 统计episode-name元素数量,确认是否正确解析
Elements episodes = document.select(".episode-name");
System.out.println("解析到的剧集数量:" + episodes.size());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:57:44