寻找一个好的HTML解析器,将提供offsetHeight的值
问题描述:
我有一个项目,需要我加载一个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(也许,不确定)会将您的HTML字符串并将其转换为可导航的DOM。重用,不要重新创建HTML解析器。你的项目结束时会留下更多的头发。
不知道如果我关注。 WebBrowser是一个windows.forms类。我有一个无形的.dll。你能做这个吗?我会修补这个,但我很好奇,如果没有更好的方法? – Brett 2010-02-26 18:04:01
那么你知道什么!我添加了一个带有浏览器控件的窗体,它的功能就像一个魅力。我没有看到窗口被调用时出现,所以这对我很有用!谢谢! – Brett 2010-02-26 19:16:15
我在很多年前的一次单元测试中使用过它。对班级不是很确定,但很高兴它能奏效。 – 2010-02-27 03:48:48