获取HTML网页内容SgmlReader

Microsoft的XML大师Chris Lovett发布了一个新的SGML解析器(应该是2008年的版本),叫做SgmlReader(早期的SgmlReader在2006年以前就出了),它可以解析HTML文件,甚至将它们转换成一个格式规范的结构。SgmlReader派生于XmlReader,这就是说,你可以像运用诸如XmlTextReader这样的类来解析XML文件那样来解析HTML文件。

 
将其实际应用的结果如图:
1. 示例网页(我们需要获取的):
 

 
 
2. 获取<body>内所有标签的值
 
 

 
 
3. 获取<html>内所有alt属性值(图片提示信息)
 

 
 
4. 获取<body>内<div>标签属性id为"frame"下,<div>标签属性id为"bodyArea",层内所有标签值
 

 
 
5. 以上示例都是获取远端HTML页面(http://172.16.1.5/menu_en.html)源码内容的示例,以下是获取本地HTML内标签值示例。
 
 

 
  
  
  1. private string GetWellFormedHTMLFile(string filePath, string xpath) 
  2.         { 
  3.             StreamReader sReader = null
  4.             StringWriter sw = null
  5.             SgmlReader reader = null
  6.             XmlTextWriter writer = null
  7.             try 
  8.             { 
  9.                 sReader = new StreamReader(filePath); 
  10.                 reader = new SgmlReader(); 
  11.                 reader.DocType = "HTML"
  12.                 reader.InputStream = new StringReader(sReader.ReadToEnd()); 
  13.                 sw = new StringWriter(); 
  14.                 writer = new XmlTextWriter(sw); 
  15.                 writer.Formatting = Formatting.Indented; 
  16.                 //writer.WriteStartElement("Test"); 
  17.                 while (reader.Read()) 
  18.                 { 
  19.                     if (reader.NodeType != XmlNodeType.Whitespace) 
  20.                     { 
  21.                         writer.WriteNode(reader, true); 
  22.                     } 
  23.                 } 
  24.                 //writer.WriteEndElement(); 
  25.                 if (xpath == null
  26.                 { 
  27.                     return sw.ToString(); 
  28.                 } 
  29.                 else 
  30.                 { //Filter out nodes from HTML 
  31.                     StringBuilder sb = new StringBuilder(); 
  32.                     XPathDocument doc = new XPathDocument(new StringReader(sw.ToString())); 
  33.                     XPathNavigator nav = doc.CreateNavigator(); 
  34.                     XPathNodeIterator nodes = nav.Select(xpath); 
  35.                     while (nodes.MoveNext()) 
  36.                     { 
  37.                         sb.Append(nodes.Current.Value + ((char)13).ToString()); 
  38.                     } 
  39.                     return sb.ToString(); 
  40.                 } 
  41.             } 
  42.             catch (Exception exp) 
  43.             { 
  44.                 writer.Close(); 
  45.                 reader.Close(); 
  46.                 sw.Close(); 
  47.                 sReader.Close(); 
  48.                 return exp.Message; 
  49.             } 
  50.         } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值