MSHTML: CreateDocumentFromString вместо CreateDocumentFromUrl - PullRequest
4 голосов
/ 03 апреля 2012

Я хотел бы использовать библиотеку MSHTML для анализа некоторого HTML-кода, который у меня есть, в строковой переменной. Однако я не могу понять, как это сделать. Я могу легко разобрать содержимое веб-страницы по известному URL, но не по исходному HTML. Это возможно? Если да, то как?

Public Sub ParseHTML(sHTML As String)
Dim oHTML As New HTMLDocument, oDoc As HTMLDocument

    'This works:'
    Set oDoc = oHTML.createDocumentFromUrl("http://www.google.com", "")

    'I would like to do the following but no such method actually exists:'
    Set oDoc = oHTML.createDocumentFromString(sHTML)

    ....
    'Parse the HTML using the oDoc variable'
    ....

Ответы [ 3 ]

13 голосов
/ 03 апреля 2012

Вы можете;

Dim odoc As Object

Set odoc = CreateObject("htmlfile") '// late binding

'// or:
'// Set odoc = New HTMLDocument 
'// for early binding

odoc.open
odoc.write "<p> In his house at R'lyeh, dead <b>Cthulhu</b> waits dreaming</p>"
odoc.Close
MsgBox odoc.body.outerHTML
1 голос
/ 18 апреля 2015

Для простого HTML-кода, такого как Access-Rich-Text, это делается:

Dim HTMLDoc As New HTMLDocument

HTMLDoc.Body.innerHTML = strHTMLText
1 голос
/ 10 декабря 2013

Это гораздо лучший пример. Вы не получите ни нулевого исключения, ни позднего связывания.

(И если вы используете WPF, просто добавьте System.Windows.Forms в качестве ссылки.)

Dim a As Object
        a = New mshtml.HTMLDocument

        a.open()
        a.writeln(code)
        a.close()

        Do Until a.readyState = "complete"
            System.Windows.Forms.Application.DoEvents()
        Loop


        Dim doc As mshtml.HTMLDocument = a



        Dim b As mshtml.HTMLSelectElement = doc.getElementsByTagName("Select").item("lang", 0)
...