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
- Bugfix:
form
元素和 empty 元素(例如img
)的屬性沒有去重。#1950
- 如果是從克隆中克隆了
Document.OutputSettings
,則使用時會拋出 NPE。#1964
- 在
Jsoup.connect(String url)
中,包含 %2B 的 URL 路徑被錯誤地重新編碼為 '+',或者 '+' 被重新編碼為 ' '。通過恢復到以前不編碼提供的路徑的行為(除了標準化為 ASCII)來修復。#1952
- 在
Jsoup.connect(String url)
中,包含補充字符(例如表情符號)的字符串未正確進行 URL 轉義。 - 在
Jsoup.connect(String url)
中,ConstrainableInputStream 將在讀取正文時清除線程中斷。這阻止了調用者生成線程、在一段時間內運行多個請求、然后在中斷該線程后加入該線程。#1991
- 跟蹤 HTML 源位置時, 無法正確跟蹤
H1
...H6
元素的 closing tags。#1987
- 在
Jsoup.connect()
中,DELETE
方法請求不支持請求正文。#1972
- 在嵌套極深的元素上調用
Element.cssSelector()
時,可能出現StackOverflowError
。此外,在運行查詢時可能會出現StackOverflowError
。#2001
- 在
empty()
之后將節點追加回其原始Element
,會產生索引越界異常。此外,現在被刪除的子節點的父節點已被清除,從而將它們與原始父節點完全分離。#2013
- 在
Connection
添加 headers 時,該值可能被假定為錯誤解碼的ISO_8859_1
字符串,并重新編碼為UTF-8
?,F在該值保持不變。
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
- 由于啟用和未啟用腳本模式的解析器之間不兼容,阻止將
noscript
tags 添加到安全列表。