Jsoup官方说明里,一个重要的功能就是output tidy HTML。这里我们看看Jsoup是如何输出HTML的。
HTML相关知识
分析代码前,我们不妨先想想,“tidy HTML”到底包括哪些东西:
- 换行,块级标签习惯上都会独占一行
- 缩进,根据HTML标签嵌套层数,行首缩进会不同
- 严格的标签闭合,如果是可以自闭合的标签并且没有内容,则进行自闭合
HTML实体的转义
另外,Jsoup的Entities类里包含了一些HTML实体转义的东西。这些转义的对应数据保存在entities-full.properties和entities-base.properties里。
Jsoup的格式化实现
在Jsoup里,直接调用Document.toString()(继承自Element),即可对文档进行输出。另外OutputSettings可以控制输出格式,主要是prettyPrint(是否重新格式化)、outline(是否强制所有标签换行)、indentAmount(缩进长度)等。
里面的继承和互相调用关系略微复杂,大概是这样子:
Document.toString()=>Document.outerHtml()=>Element.html(),最终Element.html()又会循环调用所有子元素的outerHtml(),拼接起来作为输出。
//toString时不进行格式化输出 document.outputSettings().prettyPrint(false);