You need to enable JavaScript to run this app. Jsoup解析表格内嵌套p标签的HTML时p标签错误闭合问题
优惠活动
大模型
产品
解决方案
定价
更多

Jsoup解析表格内嵌套p标签的HTML时p标签错误闭合问题

Jsoup 解析后出现空 p 标签的原因
  • 核心原因是HTML 规范本身禁止 p 标签嵌套。根据 W3C 标准,<p> 标签的内容模型仅允许包含文本、行内元素等短语内容,不允许嵌套另一个块级的 <p> 标签。所有遵循HTML解析规范的解析器,遇到非法嵌套的 p 标签时,都会自动修正结构,而非原样保留错误写法。
  • Jsoup 默认使用遵循WHATWG HTML解析规范的解析器,处理逻辑如下:
    1. 解析到外层 <p> 开标签后,遇到内层的 <p> 开标签时,会自动隐式闭合尚未结束的外层 <p>,因此最开始的外层 <p> 会变成一个空的开-闭标签对
    2. 后续遇到最外层对应的 </p> 闭合标签时,由于没有匹配的未闭合 <p> 开标签,解析器会自动将其转换为一个新的空 <p> 标签
    3. 最终表现为td内多出两个无内容的空p标签,和实际解析结果吻合。
对应解决方案

根据实际业务场景选择对应处理方式:

  • 可修改待解析原始HTML的场景
    直接从源头修正非法结构,去掉 p 标签的嵌套写法,把需要分层的内容用 <div> 等合规标签包裹,或者拆分为同级的 p 标签,从根源上避免触发解析器的自动修正逻辑。
  • 必须保留原始HTML非法嵌套结构的场景
    解析时放弃默认的HTML解析器,改用严格匹配标签开闭关系的XML解析器,对应调用代码为:
    Jsoup.parse(原始HTML字符串, "", Parser.xmlParser())
    这种解析模式不会自动按照HTML规则做标签修正,会原样保留 p 标签嵌套的原始结构。
  • 仅需清理多余空p标签的场景
    解析完成后,直接遍历文档删除所有无实际文本内容的空 p 标签,对应选择器写法为:
    doc.select("p:matchesOwn(^\\s*$)").remove()
    执行后即可得到无空p标签的干净输出。

内容的提问来源于stack exchange,提问作者César Castro Aroche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 10:54:02