我目前拥有围绕元素包装表格的代码:
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之前打印出元素,则输出是我创建的标记)
答案 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>
希望这有帮助