JSoup解析器无法捕获table元素,select查询返回空集合的原因是什么
问题原因
经过复现验证,导致该问题的核心原因通常为以下两种:
- HTML内容被全量转义为实体字符:你实际传入
Jsoup.parse方法的htmlString中,所有标签的<、>符号都被转换成了<、>这类HTML实体字符,JSoup会将这部分内容识别为普通文本节点,不会解析为DOM结构,自然无法匹配到table元素。这种情况一般是你复制HTML内容时直接取了页面渲染后的转义内容,或是提前对HTML字符串做了HTML转义处理导致的。 - 类导入错误:你导入的
Document、Elements类并非org.jsoup.nodes、org.jsoup.select包下的类,而是误导入了其他DOM解析库(如w3c DOM)的同名类,导致解析和选择逻辑完全不符合预期。
修复方案
你可以先打印htmlString的原始内容做确认,再对应处理:
- 如果字符串中确实存在大量
<、>实体,先对字符串做HTML实体反转义,再传入JSoup解析即可。 - 如果是类导入错误,替换为JSoup官方包下的对应类即可。
另外补充:你预期select("table")的首项为<h2>My Soup Materials</h2>是认知错误,该选择器返回的集合只会包含匹配到的table标签,h2是第一个table的子元素,需要拿到table元素后再调用select("h2")获取。正常解析场景下,你提供的HTML代码用document.select("table")可以得到2个匹配的table元素,不会出现返回结果为空的情况。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

