2011-02-24 29 views
9

Có cách nào để phân tích chuỗi HTML trong mã Net đằng sau như DOM phân tích cú pháp ...Parsing HTML Chuỗi

tức GetElementByTagName ("abc"). GetElementByTagName ("tag")

Tôi đã đoạn mã này ...

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

nếu nó là XHTML hợp lệ có lẽ bạn có thể tải nó trong 'System.Xml.XDocument' – Bazzz

Trả lời

10

Bạn có thể sử dụng tuyệt vời HTML Agility Pack.

Đây là một phân tích cú pháp HTML nhanh nhẹn rằng xây dựng một đọc/viết DOM và hỗ trợ XPath đơn giản hoặc XSLT (bạn thực sự không cần phải hiểu XPath cũng không XSLT để sử dụng nó, đừng lo lắng ...). Nó là một thư viện mã .NET cho phép bạn phân tích cú pháp "ra khỏi web" các tệp HTML. Trình phân tích cú pháp rất khoan dung với HTML không đúng định dạng "thế giới thực". Mô hình đối tượng rất giống với những gì đề xuất System.Xml, nhưng đối với các tài liệu HTML (hoặc các luồng).

+0

dangit oded - Tôi vừa đăng cùng một điều này, tôi chỉ chậm và tốc độ của bạn! :) +1 từ tôi. – phillip

+0

@Downvoter - chăm sóc bình luận? – Oded

7

Hãy nhìn vào cách sử dụng Ví dụ Html Agility Pack

của việc sử dụng nó:

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

Chuỗi xpath phải là "// a [@href]"? –

2

Bạn có thể sử dụng HTML Agility Pack và một chút XPath (thậm chí nó có thể tải tài liệu cho bạn):

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

Tôi đã sử dụng HTML Agility Pack để thực hiện điều này và tôi nghĩ điều đó thật tuyệt. Nó đã thực sự hữu ích cho tôi.