我有一个方法,该方法的属性描述类型为“元素”,然后尝试使用Jsoup.after方法添加另一个元素。
但是,它会产生
Exception in thread "main" java.lang.IllegalArgumentException: Object must not be null
。
另一方面,append方法效果很好,但是我并不是我真正想要的。
代码如下:
private static void buildTotalvaluesTable2()
{
Element readyDesc = new Element("p style=\"margin-top:5px\">This is description</p");
Element totalValuesTable = new Element("table style=\"width:100%; border: 0px; margin-top:20px;\" class=\"hidden\">" +
"<tbody></tbody>" +
"</table");
readyDesc.after(totalValuesTable.outerHtml());
System.out.println(readyDesc.outerHtml());
}
我真正想要实现的就是在readyDesc之后添加totalValuesTable。
有人可以帮忙吗?
答案 0 :(得分:0)
让我们首先说明将元素b
设置为元素a
(在此由a.after(b)
表示)的含义。
简而言之,这意味着将元素b
放置在元素parent
的{{1}}元素中的a
中,紧靠a
元素(之后)的位置。
因此,在这一点上,我们可以看到您的代码的主要问题是它没有提供任何指向 parent 元素的链接。放置。
简单的解决方法是
Element
或Document
a
元素分配为父元素的子元素b
元素分配为a
的同级,换句话说,是这样的:
Element parent = new Element("body");
Element a = ...
parent.appendChild(first); // create parent-child relation
Element b = ...
a.after(b); // now `a` knows about its parent element so it knows
// to which element append `b`
第二个问题是您在{p>上没有正确使用new Element(...)
new Element("p style=\"margin-top:5px\">This is description</p");
该构造函数的目的不是 create和setup ,而只是 create HTML元素。自定义该元素应在以后完成。
换句话说,不要使用new Element("<tag with='attributes'>and other elements</tag>")
,而是使用new Element("tagName")
并通过诸如以下的专用方法来设置该元素:
Element readyDesc = new Element("p");//use only name of tag, without < and >
System.out.println(readyDesc); //raw form: <p></p>
//customize tag
readyDesc.attr("style", "margin-top:5px");
readyDesc.text("This is description");
System.out.println(readyDesc);//customized: <p style="margin-top:5px">This is description</p>