2012-02-27 25 views
8

Biết rằng tôi không thể sử dụng HtmlAgilityPack, chỉ thẳng NET, nói rằng tôi có một chuỗi có chứa một đoạn mã HTML mà tôi cần phải phân tích và chỉnh sửa theo những cách như vậy:.NET framework có cung cấp các phương thức phân tích chuỗi HTML không?

  • tìm điều khiển cụ thể trong hệ thống phân cấp bởi id hoặc bằng thẻ
  • sửa đổi (và lý tưởng tạo) thuộc tính của những yếu tố tìm thấy

có phương pháp có sẵn trong .net làm như vậy?

+1

Tôi biết ... [sử dụng regex] (http://stackoverflow.com/a/1732454/119477) –

+4

Tôi không biết ... không sử dụng regex http: // stackoverflow.com/questions/1732348/regex-match-open-tags-ngoại trừ-xhtml-self-contained-tags/1758162 # 1758162 –

+1

Nếu HTML của bạn xảy ra là XHTML, thì bạn có thể sử dụng các thư viện XML chuẩn để phân tích cú pháp, truyền tải và sửa đổi nó. – Douglas

Trả lời

5

HtmlDocument

GetElementById

HtmlElement

Bạn có thể tạo một tài liệu html dummy.

WebBrowser w = new WebBrowser(); 
w.Navigate(String.Empty); 
HtmlDocument doc = w.Document; 
doc.Write("<html><head></head><body><img id=\"myImage\" src=\"c:\"/><a id=\"myLink\" href=\"myUrl\"/></body></html>"); 
Console.WriteLine(doc.Body.Children.Count); 
Console.WriteLine(doc.GetElementById("myImage").GetAttribute("src")); 
Console.WriteLine(doc.GetElementById("myLink").GetAttribute("href")); 
Console.ReadKey(); 

Output:

file: /// c:

về: myUrl

Editing yếu tố:

HtmlElement imageElement = doc.GetElementById("myImage"); 
string newSource = "d:"; 
imageElement.OuterHtml = imageElement.OuterHtml.Replace(
     "src=\"c:\"", 
     "src=\"" + newSource + "\""); 
Console.WriteLine(doc.GetElementById("myImage").GetAttribute("src")); 

Output:

file: /// d:

+3

Điều này yêu cầu bạn tải lên tài liệu trong một điều khiển Winforms. – porges

+0

Sửa lỗi nếu tôi sai nhưng điều này yêu cầu điều khiển trình duyệt web và không cho phép phân tích cú pháp chuỗi HTML trực tiếp. –

+0

@ JellyAma, vâng, nhưng không phải là những gì bạn dường như muốn trong "sửa đổi (và lý tưởng tạo) thuộc tính của những yếu tố tìm thấy"? –

1

Giả sử bạn đang làm việc với HTML cũng được hình thành, bạn chỉ có thể điều trị các văn bản như một tài liệu XML. Khung được tải với các tính năng để thực hiện chính xác những gì bạn đang yêu cầu.

http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx

+5

Hãy thử phân tích cú pháp này * cũng được tạo thành * html. ' line1' **
**' line2 ' –

+0

Thứ tự ... XHTML – Doug

0

Bạn có thể xem làm thế nào HTML Agility Pack hoạt động, tuy nhiên, nó là Net. Bạn có thể phản ánh việc lắp ráp và thấy rằng nó đang sử dụng MFC và có thể được sao chép nếu bạn muốn, nhưng bạn sẽ không làm gì hơn là di chuyển lắp ráp, không làm cho nó nữa. Net.

+4

Hoặc bạn có thể lấy nguồn từ Codeplex. http://htmlagilitypack.codeplex.com/ – Jimmy

+0

Rất đúng Jimmy. – John

1

Bên cạnh những Agility Pack HTML, và porting HtmlUnit trên C#, những gì có vẻ như giải pháp rắn là:

  • rõ ràng nhất - sử dụng regex. (System.Text.RegularExpressions)
  • Sử dụng Trình phân tích cú pháp XML. (vì HTML là một hệ thống các thẻ xử lý nó như một tài liệu XML?)
  • LINQ?

Một điều tôi biết là phân tích HTML như XML có thể khiến bạn gặp phải một số sự cố. XML và HTML không giống nhau. Đọc về nó: here

Ngoài ra, đây là một bài về Linq vs Regex.

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 http://stackoverflow.com/questions/1732348/regex-match- thẻ mở-ngoại trừ-xhtml-self-contained-tags/1758162 # 1758162 –

Các vấn đề liên quan