您的位置:首页 > Web前端 > HTML

有关于用JTidy处理HTML转化为标准的XHTML或者XMl出现空的问题

2014-07-02 09:16 453 查看
        最近在项目中遇到了一个无法解决的问题,是有关于HTML源码转化为标准格式的XHTML或者是XML数据的问题,这是项目中遇到的一个问题。

        JTidy是一个java的用于处理HTML源码的工具,由于HTML是半结构化的,所以其中有很多的不好的或者其他不规范标准的格式,如没有结束标签等等,JTidy可以去除这些不好的格式,或者补全结束标签等这样的功能,把半结构化的HTML转化为结构化的,标准的XHTML结构和XML结构,但是最近在使用时出现了问题。
Document doc = null;
try {
InputStream in = String2InputStream(htmlStr);
// 设置 tidy ,准备转换
Tidy tidy = new Tidy();
tidy.setDocType(htmlStr);
tidy.setXmlOut(true); // 输出格式 xml
//			//tidy.setDropFontTags(true); // 删除字体节点
//			tidy.setDropEmptyParas(true); // 删除空段落
//			tidy.setFixComments(true); // 修复注释
//			tidy.setFixBackslash(true); // 修复反斜杆
tidy.setMakeClean(true); // 删除混乱的表示
tidy.setPrintBodyOnly(true);
//			tidy.setQuoteNbsp(false); // 将空格输出为  
//			tidy.setQuoteMarks(false); // 将双引号输出为 "
//			tidy.setQuoteAmpersand(true); // 将 & 输出为 &
//			tidy.setShowWarnings(false); // 不显示警告信息
tidy.setInputEncoding("UTF-8"); // 输入的流的编码为utf-8
tidy.setOutputEncoding("UTF-8"); // 输出流的编码为utf-8
//
doc = tidy.parseDOM(in, null); // 通过 JTidy 将 HTML 网页解析为
in.close(); // W3C 的 Document 对象


        这是处理时的代码,首先参数中的htmlStr是抓取的HTML的源代码,然后进行Tidy的设置,利用tidy处理HTML源码,使其规范化或者标准化,然后转化为dom结构,对其进行处理后在转化为XML格式的流,但是最近碰到的问题是在处理后结构是空,也就是doc这个变量是空的,在转化为XML后输出为空。

       经过调试后发现,这是tidy处理时出现了问题,这种问题的原因就在于原有的HTML代码的格式过于不规范,已经超出了tidy能后处理的能力,虽然他很强大,但是还没有智能到无所不能的地步,在用tidy处理并转化为dom结构是,由于HTML标签转化为dom结构中的结点,但是却没有正常转化,使其结点的层次混乱,最后再转化为XML格式时就出现了空的情况,所以如果出现了处理后为空的情况,可能就是原有的HTML代码的问题,这个解决比较困难,除非不用tidy而用其他的方法。

        但是大部分情况下,tidy是可以处理的,最近做了好长时间才遇到了在处理某个网站的时候出现了这种问题,原因在于网站的HTML源码太乱,这种情况还是出现比较少的,但是遇到了就没办法了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xhtml html xml JTidy