java - 我应该如何处理 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

到目前为止,我已经检查了各种 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/

相关文章:

html - SVG 文本元素超出父宽度

javascript - 自动从外部源导入值,并使用它们进行计算

java - 在 Jsoup 中使用 href 解析表类时出现问题

java - Jsoup 获取动态生成的HTML

java - 如何在 xpath webdriver java 中转义反斜杠

java - 在android中使用java在点击事件上写在哪里

java - 如何在 C# .NET Core 6 中使用 Java .dll?

java - JMenu JMenuCheckboxItem 设置为当前状态

javascript - 在 <audio> 元素上设置 currentTime 会使 Firefox 崩溃

java - Android 正则表达式不匹配