JSoup在身体后添加包装div

时间:2015-01-01 20:27:03

标签: html html-parsing jsoup

我正在尝试在body标签后面生成的html中添加<div class="wrapper">。我希望结尾</div>位于结尾</body>之前。到目前为止我已经

private String addWrapper(String html) {
    Document doc = Jsoup.parse(html);
    Element e = doc.select("body").first().appendElement("div");
    e.attr("class", "wrapper");

    return doc.toString();
}

我正在

 </head>
  <body>
   &lt;/head&gt;  
  <p>Heyo</p>   
  <div class="wrapper"></div>
 </body>
</html>

我也无法弄清楚为什么会得到&#34;&lt; / head&gt;&#34;在HTML中也是如此。我只在使用JSoup时才能得到它。

1 个答案:

答案 0 :(得分:4)

Jsoup Document使用normalize方法对文本进行规范化。 The method is here in Document class.所以它包装和标记。

在Jsoup.parse()方法中,它可以采用三个参数,解析(String html,String baseUri,Parser parser);

我们将解析器参数作为Parser.xmlParser使用XMLTreeBuilder(否则它使用HtmlTreeBuilder并将其标准化为html。)。

我试过,最新的代码(可能会优化):

  String html = "<body>&lt;/head&gt;<p>Heyo</p></body>";

  Document doc = Jsoup.parse(html, "", Parser.xmlParser());

  Attributes attributes = new Attributes();
  attributes.put("class","wrapper");

  Element e = new Element(Tag.valueOf("div"), "", attributes);
  e.html(doc.select("body").html());

  doc.select("body").html(e.toString());

  System.out.println(doc.toString());