我有一個項目,需要我加載一個HTML文檔作爲字符串,並解析它。我試圖確定哪個HTML節點會超過頁面的高度(8.5x11),因此我可以在它之前插入一個'page-break-after'。這將與我正在生產的.NET DLL完成。尋找一個好的HTML解析器,將提供offsetHeight的值
我試過使用mshtml dom。將字符串值加載到此並不容易,當我設法完成此操作時,offsetHeight(etc)屬性始終返回零。我發現完成這項工作的唯一方法是將HTML保存到磁盤,通過SHDocVw.InternetExplorer加載它,然後將其傳遞給mshtml dom。
我假設除非HTML由SHDocVw'呈現',否則我沒有用於報告mshtml的offsetHeight信息,因爲這是基於屏幕像素。我可能是錯的。
我當前的代碼如下:
Dim myIE As New SHDocVw.InternetExplorer
myIE.Navigate("D:\Temp\Test.HTML")
Dim myDoc As mshtml.HTMLDocument = CType(myIE.Document, mshtml.HTMLDocument)
Dim divTag As mshtml.IHTMLElement = myDoc.getElementById("someID")
For Each childNode As mshtml.IHTMLElement In TryCast(divTag.children, mshtml.IHTMLElementCollection)
If childNode.offsetTop + childNode.offsetHeight > 750 Then '72pixels = 1 inch.
childNode.insertAdjacentHTML("beforeBegin", "<DIV style='page-break-after:always'></DIV>")
End If
Next
我有兩個目標。 #1是關鍵,#2理想。
1)從字符串加載HTML,並讓上述代碼仍然有效。
2)理想情況下,找一個.NET組件來做同樣的事情。我不喜歡在.NET中依賴COM組件,除非我別無選擇。
不知道如果我關注。 WebBrowser是一個windows.forms類。我有一個無形的.dll。你能做這個嗎?我會修補這個,但我很好奇,如果沒有更好的方法? – Brett 2010-02-26 18:04:01
那麼你知道什麼!我添加了一個帶有瀏覽器控件的窗體,它的功能就像一個魅力。我沒有看到窗口被調用時出現,所以這對我很有用!謝謝! – Brett 2010-02-26 19:16:15
我在很多年前的一次單元測試中使用過它。對班級不是很確定,但很高興它能奏效。 – 2010-02-27 03:48:48