XML全称Extensible Markup Language,可翻译为可扩展标记语言,是一种置标语言。常用XML文档描述数据,使得数据能被多个程序共享,还常用XML文档存放程序的配置参数,也用于定义Web网页上的文档元素(如RSS)以及商业文档。
在现实应用中,由于浏览器的易错性,大量的HTML网页格式很不规范。将HTML网页文件转换成XML文件后,将大大方便网络信息的抓取和维护。下面这个实例的功能是将HTML网页文件转成XML文件。 这个转换要用到tidy的jar包,官方下载地址 http://sourceforge.net/projects/jtidy 下载下来,然后把里面的jar引入到项目中去就可以了。
技术要点
运用Java扩展标准库org.w3c.tidy.Tidy中的方法实现加上URL网页地址的获取和转化;
运用输入和输出流缓冲区BufferedInputStream和FileOutputStream将HTML文件中的数据读取转化成XML文档。
源代码
package corejava; import java.awt.font.TextHitInfo; import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.PrintWriter; import java.net.URL; import org.w3c.tidy.Tidy; /** * 操作讲HTML文件转化成XML文件 * */ public class TestHTMLtoXML { private String url;//HTML网页地址 private String outFileName;//xml文件所在路径 private String errOutFileName;//错误信息文件所在的路径 public TestHTMLtoXML(String url,String outFileName,String errOutFileName){ this.url=url; this.outFileName=outFileName; this.errOutFileName=errOutFileName; } public void convert(){ URL u; BufferedInputStream in; FileOutputStream out; Tidy tidy=new Tidy(); tidy.setXmlOut(true);//通知Tidy将HTML转化成XML try{ System.out.println("begin"); tidy.setErrout(new PrintWriter(new FileWriter(errOutFileName),true));//讲错误信息保存到文件errOutFileName中 u=new URL(url);//根据网址创建URL对象 in=new BufferedInputStream(u.openStream());//创建缓存输入流 out=new FileOutputStream(outFileName);//创建文件输出流 tidy.parse(in,out);//转换文件 in.close(); out.close(); }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] args) { String htmlFile="http://www.baidu.com"; String xml="C:/Users/Administrator/Desktop/p.xml"; String errorFile="C:/Users/Administrator/Desktop/error.txt"; TestHTMLtoXML htmltoXML=new TestHTMLtoXML(htmlFile,xml,errorFile); htmltoXML.convert(); System.out.println("HTML文件装换成XML文件结束"); } }解读:
实例中设置输出的文件是XML格式,告知Tidy将HTML转换为XML。JTidy提供HTML语法检查和HTML的pretty printing,它还允许将一个HTML文件作为输入,然后将其转换为XML。JTidy读取输入文件,如果发现有任何不匹配或遗漏的闭合标记,将纠正这些标记,最输出一个格式良好的XML文档。
JTidy对文件转换的方法进行了良好的包装,只需在代码中加入获取输入/输出流的方法parse()方法便可将HTML文件转换为XML文件。如果转换失败,JTidy会将产生的错误信息写入错误文件中。