簡體   English   中英

我應該如何處理JSoup中已刪除的元素?

[英]How should I handle removed elements in JSoup?

我正在開發一個需要從文檔中刪除元素的應用程序。

for(Element d : doc.getAllElements()){

if(condition){
 d.getAllElements().remove();
 }

}

在這樣做時,我不斷

Exception in thread "main" java.lang.IllegalArgumentException: Object must not be null

到目前為止,我已經檢查了各種空條件,例如if(d!= null)等,但是似乎沒有一個有效。 您能否提出解決方案?

更新:假設我有兩個循環,其中在滿足條件時要刪除Elements。 下面的代碼僅作為示例,請不要為此提出解決方法,例如在第一個條件下中斷循環等,我需要在邏輯層面上理解它。

for(Element e: doc.getAllElements()){

if(condition1 == true)
{
e.getAllElements().remove();

}


if(condition2 == true){

e.getAllElements().remove();

}


}

如果兩個條件都滿足,則元素將在第一個循環中刪除,而在第二個條件中,它將引發非法異常。 我嘗試評估該問題,發現JSoup在內部檢查該元素是否不為null,如果是,則拋出異常。 考慮一下場景:

if(e != null) // e is an Element.

在上面的null檢查中,JSoup將檢查e的存在(在這種情況下為null),因此在出現下一個單詞!= null之前檢​​查異常。 我檢查了文檔,發現存在一個方法Validation.notNull(Element),但是它返回void。 是否可以從中獲取布爾返回值? 還有什么解決方案?

如果檢查doc.getAllElements()的結果,您會看到第一個元素是整個文檔,因為從技術上講, <html></html>是單個元素。 如果嘗試.remove()此元素,則它沒有父元素,因此當它嘗試驗證父元素存在時,會出現此null錯誤。

如果您只想從身體上去除東西,建議您使用

for(Element e: doc.select('body'))

或類似的,如果你不只是想要身體

您必須檢查元素是否仍存在於文檔中,然后將其刪除。 一對一刪除元素:

for (Element element: doc.getAllElements()) {
    if(condition1 == true)
    {
        for (Element subElement: element.getAllElements()) {
            if (subElement.root() == doc) {
                subElement.remove();
            }
        }
    }
    if(condition2 == true)
    {
        for (Element subElement: element.getAllElements()) {
            if (subElement.root() == doc) {
                subElement.remove();
            }
        }
    }
}

從jsoup文檔中刪除任何元素后,其引用將變為null。 因此,無論您在何處使用“刪除”,都必須進行空檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM