Jsoup Element.wrap(String html)方法抛出NullPointerException

时间:2013-10-23 03:18:40

标签: jsoup

我目前拥有围绕元素包装表格的代码:

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"))
           );
}

现在我在main方法中创建一个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);
}

问题是我在wrap方法中收到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之前打印出元素,则输出是我创建的标记)

1 个答案:

答案 0 :(得分:5)

我找到了答案,因为你没有parentNode,所以会抛出NPE。 Jsoup尝试执行换行而不检查parentNode中的空值,如下所示

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

因此,无法使用输入html字符串包装元素而不使用 parentNode 。通过这种方式,您可以使用<p>对文档(parentNode)进行包装<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>

希望这有帮助