【问题标题】:Pretty HTML snippet output漂亮的 HTML 片段输出
【发布时间】:2015-05-25 15:26:13
【问题描述】:

我有一个 HTML <div><p>text1</p></div><div><p>text1</p></div>sn-p

我想把它变成这样

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

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

【问题讨论】:

  • 谢谢,不知怎的我错过了这个:)

标签: java html jsoup transform pretty-print


【解决方案1】:

你可以用Jsoup点赞

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

但这会将您的文本包装成

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

要摆脱这部分,您可以从&lt;body&gt; 获得部分喜欢

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>

【讨论】:

    【解决方案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();
    }
    

    【讨论】:

    • 是否可以避免在我的结果中自动添加头部和身体?我只需要解析 sn-p。
    • 我已经设置了tidy.setPrintBodyOnly(true); - 应该这样做。如果它仍然被包装,只需从 htmlDOM 获取节点主体的内容。 Node body = htmlDom.getElementsByTagName("body").item(0);
    • 如果我只需要漂亮的 [header part] 而不是 body 怎么办?
    • 删除tidy.setPrintBodyOnly(true);。你得到完整的文档。然后再次使用 htmlDom 并提取标头节点。 Node head = htmlDom.getElementsByTagName("head").item(0);
    • 它还将一些新的html5标签替换为div :( 不能真正使用它
    【解决方案3】:

    我会使用HTML Tidy,这里是online version

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

    Sublime Text

    BBEdit

    Coda

    【讨论】:

    • 如何避免添加正文和html?我只想拥有我的sn-p。
    • 这取决于您何时尝试执行此操作。您想即时执行此操作,以便将您的代码发送到格式化的页面,还是您在编辑时尝试执行此操作?
    • 我需要显示我们页面组合的html的sn-ps。有些客户希望单独查看 sn-ps,而不是查看页面上的 HTML。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2014-12-13
    • 2014-08-16
    • 2013-02-09
    • 2012-07-09
    • 2012-05-18
    相关资源
    最近更新 更多