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时,它都会抛出相同的异常,因为它已经在以前的某个循环中被删除。请给出更多代码。现在理解这个问题有点困难。请注意,问题是两个不同条件的循环。这是错误的。删除后,图元引用不会更改。