使用jsoup解析HTML并保留原始内容

NVI*_*NVI 6 java parsing html-parsing jsoup

我想替换HTML文件中的一些元素,保持所有其他内容不变.

Document doc = Jsoup.parse("<div id=title>Old</div >\n" +
        "<p>1<p>2\n" +
        "<table><tr><td>1</td></tr></table>");
doc.getElementById("title").text("New");
System.out.println(doc.toString());
Run Code Online (Sandbox Code Playgroud)

我希望有以下输出:

<div id=title>New</span></div >
<p>1<p>2
<table><tr><td>1</td></tr></table>
Run Code Online (Sandbox Code Playgroud)

相反,我有:

<html>
 <head></head>
 <body>
  <div id="title">New</div>
  <p>1</p>
  <p>2 </p>
  <table>
   <tbody>
    <tr>
     <td>1</td>
    </tr>
   </tbody>
  </table>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Jsoup补充说:

  1. 关闭p标签
  2. 双引号属性值
  3. TBODY
  4. HTML,头部和身体元素

我可以将修改后的HTML序列化为原始版本吗?杰里科做到了这一点,但它没有像Jsoup那样提供灵活的DOM操作方法.

oll*_*llo 1

属性值是否有理由不应该被引用?请参阅此处此处

对于其他点,请尝试以下操作:

final String html = "<div id=title>Old</div >\n"
            + "<p>1<p>2\n"
            + "<table><tr><td>1</td></tr></table>";

Document doc = Jsoup.parse(html);
doc.select("[id=title]").first().text("New");
doc.select("body, head, html, tbody").unwrap();
doc.outputSettings().prettyPrint(false);

System.out.println(doc);
Run Code Online (Sandbox Code Playgroud)