jsoup 1.16.2 现已发布。jsoup 是一个用于处理 real-world HTML 的 Java 库。它使用最好的 HTML5 DOM 方法和 CSS 选择器提供了一个非常方便的 API 用于提取和操作数据。
下载地址:https://jsoup.org/download
具体更新内容包括:
Improvements
- 通过添加基于成本的查询规划器,优化了复杂 CSS 选择器的性能。评估器按其相对执行成本排序,并按成本从低到高的顺序执行。这通过确保在更复杂的评估(例如属性正则表达式或使用 :has 进行深度子扫描)之前进行更简单的评估(例如标签名称匹配)来加速匹配过程。
- 添加了对
<svg>和<math>标签(及其子标签)的支持。这包括标签命名空间以及适用标签和属性的大小写保留。#2008
- 在
W3CDom中将 jsoup 文档转换为 W3C 文档时,根据 HTML5 规范,HTML 文档将默认放置在http://www.w3.org/1999/xhtml命名空间中。这可以通过设置W3CDom#namespaceAware(boolean false)来控制。#1848
- 通过备忘录化之前的评估,优化了结构评估器的速度。特别是
~(any preceding sibling)和:nth-of-type选择器得到了改进。#1956
- 调整了元素
nextElementSibling、previousElementSibling、firstElementSibling、lastElementSibling、firstElementChild和 lastElementChild 的性能。他们现在在子节点列表中进行 filter/skip,而无需分配和扫描完整的元素过滤列表。
- 优化了之前调用
Element.children()的内部方法,改为使用 filter/skip 子节点列表访问器,从而减少新的元素列表分配。
- 调整了解析
:pseudo选择器的性能。
- 使用
:empty伪选择器时,空白文本节点现在被视为空。以前,包含任何空格的元素不被视为空。#1976
- 在表单中,
<input type="image">应从Element.formData()中排除(因此也排除在表单提交之外)。#2010
- 在
Safelist中,将isSafeTag()和isSafeAttribute()变为 public 方法,以实现扩展性。#1780
Bug Fixes
Changes
- 删除了以前已被弃用的
Document.normalise()、Element.forEach(org.jsoup.helper.Consumer<>)、Node.forEach(org.jsoup.helper.Consumer<>)和org.jsoup.helper.Consumer接口。
- 以前的 compatibility shim
org.jsoup.UncheckedIOException已被弃用,取而代之的是现在支持的java.io.UncheckedIOException。#1989
- 由于启用和未启用脚本模式的解析器之间不兼容,阻止将
noscripttags 添加到安全列表。
更新说明:https://github.com/jhy/jsoup/releases/tag/jsoup-1.16.2