一款很不错的html转xml工具-Html Agility Pack

 之前发个一篇关于实现html转成xml的劣作《实现html转Xml》,受到不少网友的关心。该实现方法是借助htmlparser去分解html内容,然后按照dom的结构逐个生成xml字符串。在没有充分实践后,还以为该方案能解决问题。然而经过实际使用,效率确实很低,而且对一些特殊html属性的转换也不支持,得到的结果差强人意。

  偶然一次机会在浏览codeplex网站时,发现一款很不错的html解析以及转换工具,就是本篇标题所提到的Html Agility Pack。Html Agility Pack是codeplex里的一款开源框架,其主要功能是利用对象模型去操作html内容,能够把xpath等xml方面的技术简单、灵活地应用在html文档解析中。正如其介绍所说的那样,该框架非常适合用于开发爬虫,网络数据挖掘工具。更重要的是该框架完全由c#语言编写,便于对框架的修改和深入的研究。

  下面来看看如何将html转换成xml格式

  首先创建一个HtmlDocument对象(该HtmlDocument是Html Agility Pack中的类,并不是winform里的那个),所有的对html的操作都通过这个对象实现。

HtmlDocument htmlDoc = new HtmlDocument();

接着设置输出成xml的一些选项

//输出成xml格式
htmlDoc.OptionOutputAsXml = true;

加载html字符串内容,同时输出转换结果

// 加载html内容
htmlDoc.LoadHtml(@"<html><body>
<table>
         <tr>
         <td>dafd</td>
         <td>
         </tr>
  </table>
</body></html>");

// 将输出结果保存到字符串流中
  StringBuilder sbXml = new StringBuilder();
  StringWriter sw = new StringWriter(sbXml);
  htmlDoc.Save(sw);

Console.WriteLine(sbXml.ToString());

提供的html内容并不是良好格式的xml,转换之后的结果:

<?xml version="1.0" encoding="gb2312"?>
<html>
<body>
                <table>
                    <tr>
                        <td>dafd</td>
                        <td></td>
                    </tr>
                </table>
</body>
</html>

转换之后,自动修复了没有匹配标记,并且加上了xml的声明。

另外在使用的时候,如果给定的html文档内容没有根节点,那么转换之后会自动添加一个名称为span的根节点。

比如输入的html文档如下:

<script>var b =‘b‘;</script>
<html><body>
                <table>
                    <tr>
                        <td>dafd</td>
                        <td>
                    </tr>
                </table>
                </body>
</html>

转换结果如下:

<?xml version="1.0" encoding="gb2312"?><span><script>
//<![CDATA[
var b =‘b‘;
//]]>//
</script><html><body>
                <table>
                    <tr>
                        <td>dafd</td>
                        <td>
                    </td></tr>
                </table>
                </body></html></span>

这种方式保证了转换时的安全,是否使用还是看具体的项目要求。

  以上方式是给定了已有的html字符串,还有另外一种更加方便的方式,那就是直接给出url路径,利用HtmlWeb就能包办下载以及转换的功能。实现方式如下:

StringBuilder sbXml = new StringBuilder();
            StringWriter sw = new StringWriter(sbXml);
            XmlTextWriter tw = new XmlTextWriter(sw);

HtmlWeb htmlWeb = new HtmlWeb();
            htmlWeb.LoadHtmlAsXml("http://htmlagilitypack.codeplex.com/", tw);

Console.WriteLine(sbXml.ToString());

以上方式虽然方便,但是有一个不稳定的因素是:下载过来的html文档很有可能是乱码,并确实存在这种情况,为了更好的使用,我修改了下源代码,让其在下载的时候就能自动判断编码方式。

  Html Agility Pack的效率比htmlparser有了很大的提升。但是在处理一些超大页面时,还是要有一些等待。另外还有一个美中不足的是,转换的结果还是不能100%地符合表中html格式的内容,只能说是95%地接近,比起firebug的html解析功能还差的远。

Html Agility Pack的下载链接

http://htmlagilitypack.codeplex.com/

修改过的dll(修复文档下载后乱码的问题)

HtmlAgilityPack_Shenba

时间: 2024-07-28 14:04:14

一款很不错的html转xml工具-Html Agility Pack的相关文章

一款很不错的html转xml工具-Html Agility Pack 实现html转Xml

[转]一款很不错的html转xml工具-Html Agility Pack 之前发个一篇关于实现html转成xml的劣作<实现html转Xml>,受到不少网友的关心.该实现方法是借助htmlparser去分解html内容,然后按照dom的结构逐个生成xml字符串.在没有充分实践后,还以为该方案能解决问题.然而经过实际使用,效率确实很低,而且对一些特殊html属性的转换也不支持,得到的结果差强人意. 偶然一次机会在浏览codeplex网站时,发现一款很不错的html解析以及转换工具,就是本篇标题

一款很不错的手机游戏Deemo

今天我在这推荐一款很不错的手机音乐游戏<Deemo> Deemo是由Rayark Inc.发行的一款音乐手机游戏,是2013年11月13日发行的游戏,是一款钢琴节奏游戏. Deemo不同于一般的音乐游戏,在你享受音乐的同时你还可以体会到游戏自带的剧情:小黑人Deemio和从天而降的少女 两人一起敲响了美妙的音符. 这款游戏最吸引我的方面他那抒情的音乐以及与音乐相联系的唯美的剧情,你在一首曲子一首曲子往下弹奏的时候,你仿佛 可以身临其境的体会到Deemo与女孩两人的友谊. 游戏的进行方式为下落式

一款很不错的猜牌游戏源码完整版

该源码实现了一款很不错的猜牌游戏源码完整版,喜欢的朋友可以下载学习看看. 项目游戏源码下载:http://code.662p.com/view/1463.html<ignore_js_op><ignore_js_op>  <ignore_js_op> 详细说明:http://android.662p.com/thread-60-1-1.html

分享15款很实用的 Sass 和 Compass 工具

Sass 是 CSS 的扩展,增加了嵌套规则,变量,混入功能等很多更多.它简化了组织和维护 CSS 代码的成本.Compass 是一个开源的 CSS 框架,使得使用 CSS3 和流行的设计模式比以往任何时候都更容易. 在这篇文章中,我们已经收集了一组有用的 Sass 和 Compass 工具,将帮助您快速构建 Web 应用程序. 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScri

12款很棒的浏览器兼容性测试工具推荐

对于前端开发工程师来说,确保代码在各种主流浏览器的各个版本中都能正常工作是件很费时的事情,幸运的是,有很多优秀的工具可以帮助测试浏览器的兼容性,让我们一起看看这些很棒的工具. Spoon Browser Sandbox 点击你需要测试的浏览器环境,安装插件就可以进行测试了.帮助你测试网页在Safari.Chrome.Firefox和Opera浏览器中是否正常,IE以前也有的,网站上说应微软的要求去掉了. Superpreview 这是为微软自己发布的跨浏览器测试工具,您可以同时查看您的网页在多个

十二款很不错的Chrome Cookie管理插件,开发者必备之cookie插件

Cookie是开发者最常用的的功能了,本文介绍了Chrome商店中常用的一些cookie chrome插件,一共十二款chrome cookie插件,做一个图文集合,供开发者们参考学习,本站收集了全球所有的cookie开发者插件,中文翻译是由GOOGLE翻译完成的,请大家重点使用插件的下载功能,感谢! Cookie Killer for Facebook Chrome插件 保持Facebook的Facebook.com上.当你登出, Facebook的cookie被杀死,这样你,你遍历网页不被跟

最近发现国内有一款很不错的基于Java的CMS内容管理系统推荐给大家,希望能给你带来帮助

雷铭内容管理系统LMCMS 雷铭CMS是一款Java内容管理系统,基于JAVAEE主流架构模式, Spring+SpringMvc+Hibernate+Freemarker+bootstrap结构,让开发变得更简单易维护,采用高性能稳定的网络技术架构实现访问请求动静分离以及结合多级缓存机制,保证网站的快速访问,承受较大用户并发.SEO高强度内聚及个性维护,为推广助一臂之力! JAVA是一种高安全.易维护.跨操作系统.面向对象的高级语言,是一种软件开发的国际性标准语言体系,我们将采用此语言以最低的

一款很不错的FLASH时种插件

直接贴一段代码上来,大家看看效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title></

不使用fastreport自带的条码组件打印快递单(一款很不错的条码组件下载)

由于没有正确安装fastreport组件,导致没法使用fastreport中的条码组件,如何解决: 思路: 1.虽然条码组件不能使用,但有fastreport中picture组件可用. 2.查找可以生成一维码图片的组件.通过寻找找到了Barcode(下载) 3.利用picture的filelink属性,在报表中加载第二步产生的条码bmp图片. 步骤如下: 一.设计报表 1.在fastreport设计器中加入picture组件 2.设置picture的FileLink属性:c:\barcode.b