一款很不错的html转xml工具-Html Agility Pack
教程管理员 发布于2023-09-30 14:16 HTML教程 129
之前发个一篇关于实现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的一些选项
htmlDoc.OptionOutputAsXml = true;
加载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,转换之后的结果:
<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就能包办下载以及转换的功能。实现方式如下:
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
相关推荐
- 03-18 PowerPoint工具插件iSlide动画宣传片Office PPT免费模板背景素材下载
- 10-04 在HTML中取得请求中的参数
- 10-04 SharePoint 2013 母版页取消和HTML页关联
- 10-04 29行代码使用HTML5 Canvas API绘制一颗红心
- 10-04 浏览器加载和渲染html的顺序,Div和Table的区别
- 10-04 《HTML5完美游戏开发》——2.6 Processing.js实例和整合
- 10-04 如何关闭Struts2的webconsole.html
- 10-04 《HTML5 开发实例大全》——1.4 使用CSS修饰HTML 5页面
- 10-04 《HTML5游戏编程核心技术与实战》——2.8 小结
- 10-04 腾讯视频生成的Html代码
- 控制面板
- 友情链接
- 最近发表
-
- 涂鸦而不乱简约艺术主题Office PPT免费模板背景素材下载
- 有创意的情人表白动态贺卡Office PPT免费模板背景素材下载
- 绿色简约技能竞赛电力Office PPT免费模板背景素材下载
- 极简几何商务蓝年终总结汇报Office PPT免费模板背景素材下载
- 蓝橙简约商务年终总结汇报Office PPT免费模板背景素材下载
- 绿色清新教育风课堂教学通用Office PPT免费模板背景素材下载
- 潮流复古艺术感年终总结Office PPT免费模板背景素材下载
- 浅绿商务风工作总结报告Office PPT免费模板背景素材下载
- 大气简约时尚年终总结汇报Office PPT免费模板背景素材下载
- 喜庆春节风公司年终誓师表彰大会Office PPT免费模板背景素材下载
- 最新留言
-