漂亮的HTML片段输出

Dmy*_*kyi 9 html java transform pretty-print jsoup

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

我想让它变得像这样

<div>
  <p>text1</p>
</div>
<div>
  <p>text1</p>
</div>
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么?(我看过转换和jsoup)但不确定什么才能真正使用.谢谢!

Psh*_*emo 18

你可以像使用Jsoup一样

String html = "<div><p>text1</p></div><div><p>text1</p></div>";
Document doc = Jsoup.parseBodyFragment(html);
Run Code Online (Sandbox Code Playgroud)

但这会将你的文字包装成

<html>
  <head></head>
  <body>
    ..
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

为了摆脱这一部分你可以从部分<body>

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

打印

<div>
 <p>text1</p>
</div>
<div>
 <p>text1</p>
</div>
Run Code Online (Sandbox Code Playgroud)

如果要增加缩进,可以先使用

doc.outputSettings().indentAmount(4); 
Run Code Online (Sandbox Code Playgroud)

现在的结果看起来像

<div>
    <p>text1</p>
</div>
<div>
    <p>text1</p>
</div>
Run Code Online (Sandbox Code Playgroud)


Jen*_*och 2

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();
}
Run Code Online (Sandbox Code Playgroud)