1

非常に多くのフォーラムで言われているように、エレメントは DOM のノードの特殊なケースです。

しかし、この規則に違反する例外が発生しました。

ステートメントで例外をスローしますelem.remove()

ここで、ele は要素です。remove()ノードとその子孫を DOM から削除する Jsoup API の関数です。

例外 :-

[WARNING] 
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.IllegalArgumentException: Object must not be null
    at org.jsoup.helper.Validate.notNull(Validate.java:16)
    at org.jsoup.nodes.Node.remove(Node.java:266)
    at XXX.YYY.ZZZ.Template_Matching.Template_Matching.removeProductLister(Template_Matching.java:80)
    at XXX.YYY.ZZZ.Template_Matching.Template_Matching.main(Template_Matching.java:376)
    ... 6 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

コード:-

public static void function(Document doc1, Document doc2, String tag) {

        //Checking for ULs
        Elements uls_1 = doc1.getElementsByTag(tag);
        Elements uls_2 = doc2.getElementsByTag(tag);

        for (Element elem1 : uls_1) {

            // Check if elem1 exists in DOM, If No, then continue

            for (Element elem2 : uls_2) {

                // Check if elem2 exists in DOM, If No, then continue

                // If id matches, remove them
                if ((!"".equals(elem1.id())) && (elem1.id().equals(elem2.id()))) {
                    elem1.remove();
                    elem2.remove();
                    break;
                }
            }
        }
    }
4

2 に答える 2

3

親がすでに削除されている要素を削除しようとすると、エラーが発生します。これは、Jsoup のバグを示している可能性があります。親を削除すると、子も削除されませんか?

回避策は、最初に親が存在するかどうかを確認することです。

if (element != null && element.parent() != null) { // fixes java.lang.IllegalArgumentException in org.jsoup.helper.Validate.notNull
    element.remove();
}
于 2016-05-31T12:45:05.777 に答える
2

原因: java.lang.IllegalArgumentException: オブジェクトは null であってはなりません

null オブジェクトのプロパティにアクセスしていないことを確認する必要があります...

于 2013-04-08T12:46:14.420 に答える