测试html代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
.red{
color:red;
}
</style>
<script>
$(function(){
alert("asdf");
});
</script>
</head>
<body>
<H1>hi,girl</H1>
<br><!-- 缺少结束的 / -->
<input id="username" ><!-- 缺少结束的 / -->
<h1>hi,boy</h1>
<img id="myface" src="\pics\face.png"><!-- 缺少结束的 / -->
<div>
<div>
<h1>where is it</h1>
<!-- 缺少结束div -->
</div>
<!-- 这里是注释 -->
<h2>hi,这是中文</h2>
<p></p>
plz save me
<a href="www.baidu.com\index\news.do"> </a>
<div></div>
</body>
</html>
测试Java源码:
package com.mtea.demo;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.w3c.dom.Document;
import org.w3c.tidy.Node;
import org.w3c.tidy.Tidy;
import org.w3c.tidy.TidyMessage;
import org.w3c.tidy.TidyMessageListener;
public class DemoTest1 {
public static void main(String[] args) throws Exception {
//每次需要进行html代码格式化和处理都new出来
Tidy tidy = new Tidy();
//测试资源,与当前类同包
InputStream is = DemoTest1.class.getResourceAsStream("not-pretty.html");
/*
* 配置
*/
//打印配置
//tidy.getConfiguration().printConfigOptions(new PrintWriter(System.out), true);
//读取配置文件
//tidy.setConfigurationFromFile("config.txt");
//tidy.setConfigurationFromProps(null);
//是否缩进
tidy.setIndentContent(true);
//设置输出错误与警告信息
StringWriter stringWriter = new StringWriter();
PrintWriter errorWriter = new PrintWriter(stringWriter);
tidy.setErrout(errorWriter);
//是否XHTML,若是: <br> -> <br/> ; <img src=""> -> <img src=""> ....
tidy.setXHTML(true);
//是否隐藏注释
tidy.setHideComments(true);
//是否br在一行中显示
tidy.setBreakBeforeBR(true);
//不知道是啥
//tidy.setBurstSlides(false);
//是否删除空的<p></p>
tidy.setDropEmptyParas(false);
//是否用p标签包括文字,如测试html的: plz save me
tidy.setEncloseBlockText(false);
//url中的 \ -> /
tidy.setFixBackslash(true);
//属性也换行,真疯狂
tidy.setIndentAttributes(false);
//不知道是啥
//tidy.setJoinStyles(false);
//当有信息则回调,可以获得更多信息
tidy.setMessageListener(new TidyMessageListener(){
@Override
public void messageReceived(TidyMessage message) {
System.out.println("TidyMessageListener info : " + message.getMessage());
}
});
//有中文,没效果
tidy.setOutputEncoding("utf-8");
//是否只有body内容
tidy.setPrintBodyOnly(false);
//移除空元素如:<div></div>
tidy.setTrimEmptyElements(true);
//是否节点结束后另起一行
tidy.setSmartIndent(true);
//是否用em替代i,strong替代b
tidy.setLogicalEmphasis(true);
//是否把大小的标记转换成小写
tidy.setUpperCaseTags(false);
//一行有多长
tidy.setWraplen(1000);
//正确显示中文
tidy.setInputEncoding("utf-8");
/*
* 执行处理
*/
//2次输出
Node node = tidy.parse(is, System.out);
//System.out.println("\n\n\nstringWriter.toString():\n"+stringWriter.toString());
//格式化打印
ByteArrayOutputStream out = new ByteArrayOutputStream();
Document doc = tidy.parseDOM(is, null);
tidy.pprint(doc, out);
String tidied = new String(out.toByteArray());
System.out.println("\n\n tidied: \n" + tidied);
//TODO 不要忘记关闭流
}
}
//过滤器例子: http://jtidy.sourceforge.net/multiproject/jtidyservlet/filter.html