方法后的Jsoup无法按预期方式工作

时间:2019-06-27 11:04:22

标签: java html jsoup

我有一个方法,该方法的属性描述类型为“元素”,然后尝试使用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。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

让我们首先说明将元素b设置为元素a(在此由a.after(b)表示)的含义。
简而言之,这意味着将元素b 放置在元素parent的{​​{1}}元素中的a 中,紧靠a元素(之后)的位置。

因此,在这一点上,我们可以看到您的代码的主要问题是它没有提供任何指向 parent 元素的链接。放置

简单的解决方法是

  1. 创建代表父母的ElementDocument
  2. a元素分配为父元素的子元素
  3. (仅在1. 2.之后)将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>