jsoup 1.15.4 现已发布,其中包括了一些改进,尤其是在 pretty-printing HTML 时;以及一些错误的修正。jsoup 是一个用于处理 real-world HTML 的 Java 库。它使用最好的 HTML5 DOM 方法和 CSS 选择器提供了一个非常方便的 API 用于提取和操作数据。
下载地址:https://jsoup.org/download
具体更新内容包括:
Improvements
-
添加了转义 CSS 选择器(tag、ID、classes)以匹配不遵循常规 CSS 语法的元素的功能。例如,要按类名
<p class="one.two">
进行匹配,可以使用document.select("p.one\\.two");
#838 -
pretty-printing 时,将
<br>
标签后面的文本换行。#1858 -
pretty-printing 时,规范化自定义标签中 self-closing 标签后面的换行符。#1852
-
pretty-printing 时,折叠 block 和 inline 标签之间的非重要空白。#1802
-
在
[Element.forEach()]
和[Node.forEachNode()]
中,使用java.util.function.Consumer
而不是以前的 Android ompatibility shim [org.jsoup.helper.Consumer]
。后者已被弃用。#1870 -
添加了一个新方法
[Document.forms()]
,可以方便地检索包含文档中<form>
元素的List<FormElement>
。 -
增加了一个新方法
[Document.expectForm()]
,找到第一个匹配的[FormElement]
,或者 blow up trying。
Bug 修复
-
包含
[and <code>]
等字符的 URL 未正确转义,并且在获取时会抛出一个MalformedURLException
错误。#1873 -
[Element.cssSelector()]
将为标签名称、ID 或类名称需要转义的元素创建无效的选择器(例如,如果类名称包含.
或:
)。#1742 -
[Element.text()]
在 block 和 inline 元素之间应该有一个空格。#1877 -
如果一个
[Node]
或[Element]
被自身替换,则该节点将被错误地孤立。#1843 -
在
[newRequest()]
中,之前请求的表单数据被复制到新的请求中,导致执行多步表单提交时表单数据堆积,或者数据错误发送到后面的请求。现在,[newRequest()]
只复制与会话相关的设置(cookie、代理设置、用户代理等),而不是请求数据或正文。#1778 -
修复了
[Safelist.removeAttributes()]
中的问题,当使用:all
pseudo-attribute 时可能抛出一个ConcurrentModificationException
。 -
给定极深嵌套的 HTML,
[Element]
其中的许多方法可能会由于过多的递归而抛出StackOverflowError
。即:#data()
、#hasText()
、#parents()
和#wrap(html)
。#1864
Changes
- 弃用了未使用的
[Document.normalise()]
方法。规范化发生在 HTML tree 构建过程中,不再作为一个独立的阶段。
更新说明:https://github.com/jhy/jsoup/releases/tag/jsoup-1.15.4