我正在开发一个需要从文档中删除元素的应用程序。
for(Element d : doc.getAllElements()){
if(condition){
d.getAllElements().remove();
}
}
在这样做时,我不断得到
Exception in thread "main" java.lang.IllegalArgumentException: Object must not be null
到目前为止,我已经检查了各种 null 条件,例如 if(d != null) 等,但似乎没有一个有效。您能提出解决方案吗?
更新: 假设我有两个循环,在满足条件时删除元素。 下面的代码只是示例,请不要建议解决方法,例如在第一个条件下打破循环等,我需要在逻辑层面上理解它。
for(Element e: doc.getAllElements()){
if(condition1 == true)
{
e.getAllElements().remove();
}
if(condition2 == true){
e.getAllElements().remove();
}
}
如果两个条件都满足,则在第一个循环中删除元素,当遇到第二个条件时,则抛出非法异常。我尝试评估这个问题,发现 JSoup 在内部检查该元素是否不为空,如果是,它会抛出异常。考虑场景:
if(e != null) // e is an Element.
在上面的 null 检查中,JSoup 检查 e 是否存在,在本例中为 null,因此在进入下一个单词 != null 之前检查异常。我检查了文档,发现有一个方法存在 Validation.notNull(Element),但它返回 void。是否可以从中获得 boolean 返回值?还有什么解决办法呢?
最佳答案
如果您检查 doc.getAllElements() 的结果,您将看到第一个元素是整个文档,因为从技术上讲,<html></html>
是单个元素。如果您尝试 .remove() 该元素,它没有父元素,因此当它尝试验证父元素是否存在时,您会收到此 null 错误。
如果你只是想清除体内的东西,我建议使用
for(Element e: doc.select('body'))
或者类似的,如果你不只想要 body
关于java - 我应该如何处理 JSoup 中删除的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16720649/