1

ドキュメントから要素を削除する必要があるアプリケーションに取り組んでいます。

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) などのさまざまな null 条件を確認しましたが、どれも機能していないようです。解決策を教えてください。

更新:条件が満たされたときに要素を削除する2つのループがあるとします。以下のコードは単なる例です。最初の条件でループを中断するなど、これに関する回避策を提案しないでください。論理レベルで理解する必要があります。

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

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

}


if(condition2 == true){

e.getAllElements().remove();

}


}

両方の条件が満たされた場合、最初のループで要素が削除され、2 番目の条件になると、不正な例外がスローされます。問題を評価しようとしたところ、JSoup は要素が null でないかどうかを内部的にチェックし、null の場合は例外をスローすることがわかりました。シーンを考えてみましょう:

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

上記の null チェックでは、JSoup は e の存在をチェックします。この場合は null であり、したがって、次の単語 != null に到達する前に例外になります。ドキュメントを確認したところ、既存の Validation.notNull(Element) メソッドがあることがわかりましたが、void が返されます。これからブール値の戻り値を取得することは可能ですか? 他に解決策は何ですか?

4

3 に答える 3

0

要素がまだドキュメント内に存在するかどうかを確認してから削除する必要があります。要素を 1 つずつ削除します。

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();
            }
        }
    }
}
于 2019-10-11T05:42:56.790 に答える