Java 我应该如何处理JSoup中删除的元素?

Java 我应该如何处理JSoup中删除的元素?,java,html,jsoup,Java,Html,Jsoup,我正在处理一个需要从文档中删除元素的应用程序 for(Element d : doc.getAllElements()){ if(condition){ d.getAllElements().remove(); } } 在这样做的时候,我不断地 Exception in thread "main" java.lang.IllegalArgumentException: Object must not be null 到目前为止,我已经检查了各种空条件,如ifd!=空等,但似乎没有工作

我正在处理一个需要从文档中删除元素的应用程序

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

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

}
在这样做的时候,我不断地

Exception in thread "main" java.lang.IllegalArgumentException: Object must not be null
到目前为止,我已经检查了各种空条件,如ifd!=空等,但似乎没有工作。你能建议解决方案吗

更新: 假设我有两个循环,其中我在满足条件后移除元素。 下面的代码只是一个例子,请不要建议在这个问题上的解决方法,比如在第一个条件下打破循环等等,我需要在逻辑层面上理解它

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

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

}


if(condition2 == true){

e.getAllElements().remove();

}


}
若这两个条件都满足,那个么元素在第一个循环中被删除,当涉及到第二个条件时,它抛出非法异常。我试图评估这个问题,发现JSoup在内部检查元素是否为null,如果为null,则抛出异常。考虑场景:

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

在上面的空检查中,JSoup在进入下一个单词之前检查e的存在性,在本例中为空,因此为异常!=无效的我检查了文档,发现有一个方法存在Validation.notNullElement,但它返回void。是否可以从中获取布尔返回值?还有什么解决办法

如果检查doc.getAllegements的结果,您将看到第一个元素是整个文档,因为从技术上讲,第一个元素是单个元素。如果尝试删除此元素,则它没有父元素,因此当它尝试验证父元素是否存在时,会出现此空错误

如果你只是想把东西从身体里拿出来,我建议你用

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

或者类似的,如果您不只是想要主体

一旦您从jsoup文档中删除了任何元素,那么它的引用将变为null。因此,无论在何处使用“remove”,都必须进行空检查。

必须检查元素是否仍然存在于文档中,然后将其删除。逐个删除元素:

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();
            }
        }
    }
}

线路是什么?显示完整堆栈trace.ya,我已经检查过了,它是同一行,每当我尝试d.somemethod时,它都会抛出相同的异常,因为它已经在以前的某个循环中被删除。请给出更多代码。现在理解这个问题有点困难。请注意,问题是两个不同条件的循环。这是错误的。删除后,图元引用不会更改。