Ищите хороший HTML-парсер, который будет предоставлять значения, подобные offsetHeight - PullRequest
1 голос
/ 26 февраля 2010

У меня есть проект, который требует, чтобы я загрузил HTML-документ в виде строки и проанализировал его. Я пытаюсь определить, какой HTML-узел будет превышать высоту страницы (8,5х11), чтобы я мог вставить перед ней «разрыв страницы». Это будет сделано с помощью .NET DLL, которую я создаю.

Я пытался использовать mshtml dom. Загружать в нее строковое значение непросто, и когда мне удавалось это сделать, свойства offsetHeight (и т. Д.) Всегда возвращали ноль. Единственный способ найти эту работу - сохранить HTML-файл на диск, загрузить его через SHDocVw.InternetExplorer и передать его в mshtml dom.

Я предполагаю, что до тех пор, пока SHDocVw не «отобразит» HTML, у меня нет информации о 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, который будет делать то же самое. Мне не нравится полагаться на компоненты COM в .NET, если у меня нет выбора.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2010

Используйте Html Agility Pack от Codeplex, который является наиболее полным анализатором HTML и создает дерево DOM на основе структуры HTML.

0 голосов
/ 26 февраля 2010

WebBrowser (возможно, не уверен) возьмет вашу HTML-строку и преобразует ее в управляемый DOM. Повторное использование, не изобретайте анализатор HTML. у вас останется больше волос в конце вашего проекта.

...