有关于用JTidy处理HTML转化为标准的XHTML或者XMl出现空的问题
2014-07-02 09:16
453 查看
最近在项目中遇到了一个无法解决的问题,是有关于HTML源码转化为标准格式的XHTML或者是XML数据的问题,这是项目中遇到的一个问题。
JTidy是一个java的用于处理HTML源码的工具,由于HTML是半结构化的,所以其中有很多的不好的或者其他不规范标准的格式,如没有结束标签等等,JTidy可以去除这些不好的格式,或者补全结束标签等这样的功能,把半结构化的HTML转化为结构化的,标准的XHTML结构和XML结构,但是最近在使用时出现了问题。
这是处理时的代码,首先参数中的htmlStr是抓取的HTML的源代码,然后进行Tidy的设置,利用tidy处理HTML源码,使其规范化或者标准化,然后转化为dom结构,对其进行处理后在转化为XML格式的流,但是最近碰到的问题是在处理后结构是空,也就是doc这个变量是空的,在转化为XML后输出为空。
经过调试后发现,这是tidy处理时出现了问题,这种问题的原因就在于原有的HTML代码的格式过于不规范,已经超出了tidy能后处理的能力,虽然他很强大,但是还没有智能到无所不能的地步,在用tidy处理并转化为dom结构是,由于HTML标签转化为dom结构中的结点,但是却没有正常转化,使其结点的层次混乱,最后再转化为XML格式时就出现了空的情况,所以如果出现了处理后为空的情况,可能就是原有的HTML代码的问题,这个解决比较困难,除非不用tidy而用其他的方法。
但是大部分情况下,tidy是可以处理的,最近做了好长时间才遇到了在处理某个网站的时候出现了这种问题,原因在于网站的HTML源码太乱,这种情况还是出现比较少的,但是遇到了就没办法了。
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源码太乱,这种情况还是出现比较少的,但是遇到了就没办法了。
相关文章推荐
- 关于javaweb中导入json或者xml文件出现小红叉问题
- XML处理工具以及HTML转xhtml或者xml工具
- 谈谈关于程序员或者IT人员的健康问题,因为自己出现了
- 从数据库读取带有HTML或者XML内容的问题时
- Dell服务器上安装ubuntu或者其他linux系统引导盘出现no common cd-rom drive detected问题的处理
- 关于出现在服务器中配置的web,用浏览器打开出现关闭按钮消失或者字体马赛克乱码的问题
- 关于html中table容易出现的问题
- 关于ASP.net Web应用程序管理出现错误的处理,应该能解决所有的问题!
- 使用JTidy将html转化成xhtml
- Dell服务器上安装ubuntu或者其他linux系统引导盘出现no common cd-rom drive detected问题的处理
- 解决C++/CLI中关于“MissingManifestResourceException类型的未经处理的异常出现在mscorlib.dll”问题一例
- 关于SKTextureAtlas或者SKTexture加载出现错误的问题
- 关于禁用发布可能出现的问题处理
- Java解释XML出现DocumentBuilder.parse java.net.UnknownHostException的问题处理
- jsp关于include html、jsp等文件出现乱码问题的解决方案
- 关于VB.net代码转化为C#代码出现的一些问题
- 关于HTML表单中出现双重提交的问题!
- (求助)一个关于ACCESS数据库转化到MYSQL后的处理问题
- 关于在Eclipse中启动Weblogic服务器时出现Parsing Failure in config.xml问题解决方法
- 关于html改为jsp乱码问题的处理