Change Dir

先知cd——热爱生活是一切艺术的开始

统计

留言簿(18)

积分与排名

“牛”们的博客

各个公司技术

我的链接

淘宝技术

阅读排行榜

评论排行榜

JTidy的一些小tips

今天看了一下JTidy的使用,目的就是为了格式化一个不标准的html到标准的xhtml。

JTidy是一个用java写的HTML语法检查器,用JTidy可以检查并修正语法不正确的html,同时还可以对htmlDOM进行分析。Xhtmlhtml有很多不同,其中几个主要的区别是:

1.    XHTML元素必须被正确的嵌套。

2.    XHTML元素必须被关闭。

3.    标签名必须用小写字幕。

4.    XHTML文档必须有根元素。

想想这些限制也不无道理,这样的限制可以将html格式化为格式严谨的xml

JTidy的使用也非常简单,短短的几行代码就可以实现从原html到格式化好的xhtml

 1Tidy tidy = new Tidy();
 2
 3        try {
 4            FileInputStream fis = new FileInputStream(
 5                    "D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ROOT\\test2.html");
 6            InputStreamReader isr = new InputStreamReader(fis,"gb2312");
 7            OutputStream fos = new FileOutputStream(
 8                    "D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ROOT\\test2XHTML.html");
 9            OutputStreamWriter osw = new OutputStreamWriter(fos,"gb2312");
10            Document doc = tidy.parseDOM(isr, osw);
11            File tmpFile = new File(outFileName);
12            if(tmpFile.length()==0)
13                tidy.pprint(doc, out0);
14            // 转换完成
15        }
 catch (java.io.FileNotFoundException e) {
16            System.out.println(e.getMessage());
17        }
 catch (UnsupportedEncodingException e) {
18            // TODO Auto-generated catch block
19            e.printStackTrace();
20

 

其中有几个问题需要说明一下。理论上,在定义了tidy对象后,调用tidy.parse(in,out)或者tidy.parseDOM(in,out)就可以完成对输入的格式化,将其输出到输出流上。Parse返回一个Node,而parseDOM返回一个Document。如果直接用InputStreamOutputStream,那么对于编码的控制上,一般只能在tidy中控制了,而Tidy的内置编码中,简体中文没有设置。用起来不方便。如何实现中文页面输入,中文页面产出是一个问题,网上提出了一种解决方法,通过利用生成一个中间UTF-8文件,在将其转到输出流上,可以完成中文的输入。另一种实现就是利用最新的JTidy实现了parse(reader,writer)方法。因为支持readerwriter,所以可以像上面的代码一样,在包装输入流和输出流的时候,进行编码的设定。这样可以利用很短的代码完成中文乱码问题的解决,同时在效率上也要高于生成中间文件的方法。

至于在完成parse后的一个临时文件的作用是在实践中,发现有时候会遇到JTidy完成parsedocument对象存在,但是输出流没有东西。需要调用pprint才会将其输出。而什么时候调用pprint,我想到的方法就是判断输出文件是否为0.目前的情况就是要么输出文件,但是空,即长度为0,要么完成了格式化,能正确输出。因此,加一个if判断可以解决通用的情况。

posted on 2011-04-19 21:33 changedi 阅读(1937) 评论(0)  编辑  收藏 所属分类: Java技术


只有注册用户登录后才能发表评论。


网站导航: