漂亮的 HTML 片段输出

Pretty HTML snippet output

我有一段 HTML <div><p>text1</p></div><div><p>text1</p></div>

我想把它弄得像这样

<div>
  <p>text1</p>
</div>
<div>
  <p>text1</p>
</div>

最简单的方法是什么? (我看过 transform 和 jsoup)但不确定使用什么才是真正聪明的。谢谢!

我会用 HTML Tidy here is an online version.

许多文本编辑器都有插件或内置功能。

Sublime Text

BBEdit

Coda

jTidy 可以胜任这项任务 - http://jtidy.sourceforge.net/howto.html

public String prettyPrintHTML(String rawHTML)
{    
    Tidy tidy = new Tidy();
    tidy.setXHTML(true);
    tidy.setIndentContent(true);
    tidy.setPrintBodyOnly(true);
    tidy.setTidyMark(false);

    // HTML to DOM
    Document htmlDOM = tidy.parseDOM(new ByteArrayInputStream(rawHTML.getBytes()), null);

    // Pretty Print
    OutputStream out = new ByteArrayOutputStream();
    tidy.pprint(htmlDOM, out);

    return out.toString();
}

你可以用Jsoup喜欢

String html = "<div><p>text1</p></div><div><p>text1</p></div>";
Document doc = Jsoup.parseBodyFragment(html);

但这会将您的文本换行成

<html>
  <head></head>
  <body>
    ..
  </body>
</html>

要摆脱这部分,您可以从 <body> 中获得一部分,例如

System.out.println(doc.body().html());

打印

<div>
 <p>text1</p>
</div>
<div>
 <p>text1</p>
</div>

如果你想增加缩进,你可以通过

提前设置
doc.outputSettings().indentAmount(4); 

现在结果看起来像

<div>
    <p>text1</p>
</div>
<div>
    <p>text1</p>
</div>