2011-02-24 185 views
9

有没有办法来解析在.net代码后面像DOM解析HTML串...解析HTML字符串

即GetElementByTagName( “ABC”)。GetElementByTagName( “标签”)

我已经此代码块...

private void LoadProfilePage() 
{   
    string sURL; 
    sURL = "http://www.abcd1234.com/abcd1234"; 

    WebRequest wrGETURL; 
    wrGETURL = WebRequest.Create(sURL); 

    //WebProxy myProxy = new WebProxy("myproxy",80); 
    //myProxy.BypassProxyOnLocal = true; 

    //wrGETURL.Proxy = WebProxy.GetDefaultProxy(); 

    Stream objStream; 
    objStream = wrGETURL.GetResponse().GetResponseStream(); 

    if (objStream != null) 
    { 
     StreamReader objReader = new StreamReader(objStream); 

     string sLine = objReader.ReadToEnd(); 

     if (String.IsNullOrEmpty(sLine) == false) 
     { 
      ....     
     } 
    } 
} 
+0

如果它是有效的XHTML也许你可以加载它'System.Xml.XDocument' – Bazzz

回答

10

您可以使用优秀的HTML Agility Pack

这是一个灵活的HTML解析器,建立一个读/写DOM和支持纯XPath或XSLT(你居然没有了解XPATH也不XSLT使用它,不要担心...)。它是一个.NET代码库,允许您解析“离开网页”的HTML文件。解析器对“真实世界”格式错误的HTML非常宽容。对象模型与提出System.Xml非常相似,但是对于HTML文档(或流)。

+0

dangit oded - 我只是张贴这个相同的东西,只是我很慢,你的速度deamon! :)从我+1。 – phillip

+0

@Downvoter - 关心评论? – Oded

7

看一看使用它的使用Html Agility Pack

例子:

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"]) 
{ 
    HtmlAttribute att = link["href"]; 
    att.Value = FixLink(att); 
} 
+1

xpath字符串应该是“// a [@href]”? –

2

可以使用HTML Agility Pack和一点点的XPath(它甚至可以下载的文件你):

HtmlWeb web = new HtmlWeb(); 
HtmlDocument doc = web.Load("http://www.abcd1234.com/abcd1234"); 
HtmlNodeCollection tags = doc.DocumentNode.SelectNodes("//abc//tag");