1

我有一个项目需要我将 HTML 文档作为字符串加载并解析它。我正在尝试确定哪个 HTML 节点将超过页面的高度 (8.5x11),因此我可以在它之前插入一个“page-break-after”。这将通过我正在制作的 .NET dll 完成。

我尝试过使用 mshtml dom。将字符串值加载到其中并不容易,当我确实设法完成此操作时,offsetHeight (等)属性总是返回零。我发现完成这项工作的唯一方法是将 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 组件,除非我别无选择。

4

2 回答 2

0

WebBrowser(也许,不确定)将获取您的 HTML 字符串并将其转换为可导航的 DOM。重用,不要重新发明 HTML 解析器。在项目结束时,你会留下更多的头发。

于 2010-02-26T17:39:41.670 回答
-1

使用 Codeplex 的Html Agility Pack,它是最彻底的 HTML 解析器,并基于 HTML 结构创建 DOM 树。

于 2010-02-26T17:40:45.240 回答