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

使用Jsoup检测HTML格式错误遇问题,求解决方案及替代工具

Jsoup 检测HTML格式错误的问题分析与解决方案

你的代码问题所在

你当前的代码存在两个关键问题,导致无法捕获解析错误:

  1. 代码示例1:你创建了开启setTrackErrors的解析器,但调用Jsoup.parse(String)时使用的是默认解析器,而非自定义的那个。默认解析器不跟踪错误,因此getErrors()返回空列表。
  2. 代码示例2:一是存在语法错误,document()应为document.parser();二是htmlParser()创建的解析器默认未开启错误跟踪,必须显式调用setTrackErrors()才会记录错误。

正确的Jsoup用法

要让Jsoup跟踪解析错误,必须确保使用开启错误跟踪的自定义解析器处理HTML,以下是两种正确写法:

写法1:直接调用自定义Parser的parse方法

Parser parser = Parser.htmlParser().setTrackErrors(10);
// 使用自定义解析器解析目标HTML
Document document = parser.parse("<div><span></div></span>");
List<ParseError> errors = parser.getErrors();

写法2:将自定义Parser传入Jsoup.parse重载方法

Parser parser = Parser.htmlParser().setTrackErrors(10);
Document document = Jsoup.parse("<div>&invalid;</div>", "", parser);
List<ParseError> errors = document.parser().getErrors();

Jsoup的局限性

需要明确:Jsoup的核心定位是容错式HTML解析器,它会自动修复绝大多数常见的HTML语法错误(比如缺失闭合标签、标签嵌套混乱),只有遇到严重到无法自动修复的错误时,才会将其记录到ParseError列表中。例如:

  • 无效的HTML实体(如&invalid;)
  • 非法的标签格式(如<div><-div>)
  • 完全无法识别的语法结构

像你测试的<div>/div>这种情况,Jsoup会把/div>当成普通文本处理,不会判定为错误,因此不会被捕获。如果你的需求是严格验证HTML是否完全符合语法规范,Jsoup并不适合——它的设计目标是「尽可能解析任何HTML」,而非「严格校验格式」。

替代工具推荐

如果需要严格检测HTML格式合规性,推荐以下工具:

  • HTML Tidy:老牌HTML验证与修复工具,Java可通过jtidy库集成,能输出详细的错误信息、行号和修复建议,支持多版本HTML标准。
  • Nu Html Checker:W3C官方推出的HTML验证工具,提供Java API,可严格按照HTML5等标准检测语法错误,输出规范的校验报告。
  • TagSoup:专门处理不规范HTML的解析器,可配置开启详细错误日志,适合检测极端不规范的HTML内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:34:53