3

私は現在、テーブルを要素にラップするコードを持っています:

public static Element wrapElementInTable(Element e)
{
    if (e == null)
        return null;
    return e.wrap(createTableTemplate().outerHtml());
}

public static Element createTableTemplate()
{
    return createElement("table", "").appendChild( 
                createElement("tr").appendChild(
                createElement("td"))
           );
}

次に、メイン メソッドで Element を作成します。

public static void main(String[] args) throws IOException 
{
    Element e = new Element(Tag.valueOf("span"),"");
    String text = HtmlGenerator.wrapElementInTable(e).outerHtml();
    System.out.println(text);
}

問題は、何の理由もなくラップ メソッドで NullPointerException を受け取ることです。

Exception in thread "main" java.lang.NullPointerException
at org.jsoup.nodes.Node.wrap(Node.java:345)
at org.jsoup.nodes.Element.wrap(Element.java:444)
at usingjsoup.HtmlGenerator.wrapElementInTable(HtmlGenerator.java:56)
at usingjsoup.UsingJsoup.main(UsingJsoup.java:19)
Java Result: 1

NullPointerException がスローされる理由を知っている人はいますか? (wrap を呼び出す前に要素を出力すると、作成したタグが出力されます)

4

1 に答える 1

5

親ノードがないため、NPE がスローされます。Jsoup は、以下のように、parentNode の null 値をチェックせずにラップを実行しようとします。

  //the below line throws NPE since parentNode is null
  parentNode.replaceChild(this, wrap);

そのため、parentNodeなしで入力 html 文字列で Element をラップすることはできません。このようにして、ドキュメント(parentNode)でラップを行うことができます<p><div>

 public static void main(String[] args) throws IOException {
        Document document = Jsoup.parse("<p>");
        Element p = document.select("p").first();
        Element div = document.createElement("div");
        p.replaceWith(div);
        div.appendChild(p);
        System.out.println(document);
    }

出力は次のようになります

<html>
 <head></head>
 <body>
  <div>
   <p></p>
  </div>
 </body>
</html>

お役に立てれば

于 2013-10-23T18:02:19.153 に答える