当前位置: 首页 > 工具软件 > JTidy > 使用案例 >

jTidy入门和实践

宋奇希
2023-12-01

测试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

 类似资料: