2012-09-11 55 views
2

我想在網頁瀏覽器上顯示DOM,所有註釋和html,頭部,主體等都保留其結構。目前,我只能從節點html開始。 Document.All沒有幫助。 我可以看到的唯一方法是webBrowser1.Document.Body,但我會錯過評論,頭等。然後,如果我去與Document.All然後給我所有的節點。如何從C#WebBrowser獲取所有頂級htmlelements?

+0

爲什麼不簡單地保存['WebClient.DownloadString'](http://msdn.microsoft.com/en-us/library/system.net.webclient.downloadstring.aspx)的結果? – Oded

+0

我需要使用網絡瀏覽器...用戶將使用網絡瀏覽器。 – Devela

+0

那麼,你首先需要向我們描述你正在嘗試做什麼 - 目前的問題是無法回答的。 – Oded

回答

1

我認爲唯一的選擇與WebBrowser控件來得到你想要的是使用Document.All。雖然這給出了所有元素不僅僅是頂級元素,但每個元素都有一個.Parent元素屬性,因此您可以遍歷它們(或使用Linq),並只獲取具有<body><head>作爲父元素的元素。

0

嘗試使用HTMLAgilityPack,它支持Xpath,因此您可以根據需要獲取任意節點。

+0

我需要使用WebBrowser。 – Devela

+0

@Devela - 爲什麼?什麼是用例? – Oded

+0

因爲我需要從DOM中獲取代碼並將其顯示在樹中。所有的。 @Oded – Devela

0

正如hienvd_csuit建議的那樣,我認爲HTML Agility Pack是您的最佳選擇。如果您仍想使用WebBrowser,則可能的解決方案是使用dynamic(需要.NET 4+)直接訪問非託管DOM。舉例來說,你可以做這樣的事情:

dynamic dom = wb.Document.DomDocument; 
foreach (dynamic node in dom.childNodes) 
{ 
    Console.WriteLine ("{0} - {1} - {2}", node.nodeType, node.nodeName, node.nodeValue); 
} 

當然,你需要知道的DOM結構,因爲IntelliSense不動態對象的工作;你可以找到一些關於它的信息here

0

如果一個特定的項目有一個子節點或者沒有,你應該能夠查詢(有一個屬性),你也可以查詢它是否是父節點,或者如果一個特定的項目有父項目,如果它放棄,並且可以繼續查詢父項,如item.parent.parent(請檢查intellisense中的確切對象/屬性名稱),如果它不返回任何內容,則表示只有一個父項(假定item.parent不會返回任何東西),並且您可以組織多少層次的節點可以/必須是。因此,根據孩子或家長的檢查方法(或兩者),您可以選擇將其包含在收藏中或丟棄。

當然,您可能會獲得許多「P」標記或DIV/SPAN標記作爲頂級節點/項目。所以,我假設有一個機會,你不會想要這些,所以隨時丟棄他們,並查詢他們的孩子。