簡體   English   中英

尋找一個可以提供像offsetHeight這樣的值的好的HTML解析器

[英]Looking for a good HTML parser that will provide offsetHeight like values

我有一個項目,要求我將HTML文檔作為字符串加載並解析。 我正在嘗試確定哪個HTML節點將超過頁面的高度(8.5x11),因此我可以在其之前插入“ page-break-after”。 這將通過我正在生成的.NET dll完成。

我嘗試使用mshtml dom。 將字符串值加載到其中並不容易,而且當我設法完成此操作時,offsetHeight(etc)屬性始終返回零。 我發現實現此目的的唯一方法是將HTML保存到磁盤,通過SHDocVw.InternetExplorer加載它,然后將其傳遞給mshtml dom。

我假設除非HTML由SHDocVw“呈現”,否則我沒有offsetHeight信息供mshtml報告,因為這是基於屏幕像素的。 我可能是錯的。

我當前的代碼如下:

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(也許不確定)將獲取您的HTML字符串並將其轉換為可導航的DOM。 重用,不要重新發明HTML解析器。 在項目結束時,您將剩下更多的頭發。

使用Codeplex的Html Agility Pack ,它是HTML的最詳盡的解析器,並基於HTML結構創建DOM樹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM