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

现在我在我的主要方法中创建一个元素:

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 之前打印出元素,则输出是我创建的标签)

4

1 回答 1

5

我得到了你的答案,NPE 被抛出,因为你没有 parentNode。Jsoup 尝试在不检查 parentNode 中的空值的情况下进行包装,如下所示

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

因此,您不能在没有parentNode的情况下使用输入 html String包装 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 回答