之前发个一篇关于实现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());

相关文章: