2008-10-23 74 views
5

就目前而言,我認爲是能夠從包含HTML字符串操作DOM最好的辦法是:如何從C#中的HTML字符串操縱DOM?

WebBrowser webControl = new WebBrowser(); 
webControl.DocumentText = html; 
HtmlDocument doc = webControl.Document; 

有兩個問題:

  1. 需要WebBrowser對象!
  2. 這不能與多個線程一起使用;我需要的東西可以在不同的線程上工作(除了主線程)。

任何想法?

+0

http://msdn.microsoft.com /en-us/library/aa290341%28v=vs.71%29.aspx – ThunderGr 2013-10-29 07:32:31

回答

16

我搜索了GooglePlex for HTML,發現Html Agility Pack我不知道是否適合這種情況,我現在正在下載它來嘗試一下。

+1

Html敏捷包是真棒 – 2008-10-24 00:00:36

6

取決於你正在嘗試做的(也許你可以給我們更多的細節?),並根據結構良好,在HTML與否,你可以將它轉換爲一個XmlDocument

System.Xml.XmlDocument x = new System.Xml.XmlDocument(); 
x.LoadXml(html); // as long as html is well-formed, i.e. XHTML 

然後,您可以輕鬆操作它,而無需使用WebBrowser實例。至於線程,我不知道有關執行XmlDocument知道該部分的答案。


如果文件不是以適當的形式,你可以使用NTidy(用於HTML Tidy .NET包裝)得到它的形狀第一;我曾經爲一個項目做過一次這樣的事情,但它確實不錯。

+0

該文件可能沒有很好的格式,這就是爲什麼XmlDocument可能無法正常工作,但我很欣賞替代方案。 – 2008-10-23 23:56:21

5

JasonBunting已經發布了這個,但它真的可以在HTML整理文件中使用.net包裝並將其加載到XmlDocument中。

我已經使用這個.NET包裝前:

http://www.codeproject.com/KB/cs/ZetaHtmlTidy.aspx

而且有些實施這樣說:

string input = "<p>crappy html<br <img src=foo></div>"; 
HtmlTidy tidy = new HtmlTidy() 
string output = tidy.CleanHtml(input, HtmlTidyOptions.ConvertToXhtml); 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(output); 

很抱歉,如果認爲是轉貼:)

1

這是一個老問題。現在有: