我有一个项目要求我将HTML文档作为字符串加载,并解析它。我试图确定哪个HTML节点将超过页面的高度(8.5x11),所以我可以在它之前插入'page-break-after'。这将通过我正在生成的.NET DLL完成。
我尝试过使用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组件。
答案 0 :(得分:0)
WebBrowser(可能,不确定)将获取您的HTML字符串并将其转换为可导航的DOM。重用,不要重新发明HTML解析器。在项目结束时你会留下更多的头发。
答案 1 :(得分:-1)
使用Codeplex中的Html Agility Pack,这是HTML最彻底的解析器,并根据HTML结构创建DOM树。