Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MSHTML: CreateDocumentFromString instead of CreateDocumentFromUrl

I'd like to use the MSHTML library to parse some HTML that I have in a string variable. However, I can't figure out how to do this. I can easily parse the contents of a webpage given a known URL, but not the source HTML directly. Is this possible? If so, how?

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'
    ....
like image 974
mwolfe02 Avatar asked Apr 03 '12 14:04

mwolfe02


3 Answers

You can;

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
like image 145
Alex K. Avatar answered Nov 03 '22 08:11

Alex K.


For straight HTML code such as Access-Rich-Text this does it:

Dim HTMLDoc As New HTMLDocument

HTMLDoc.Body.innerHTML = strHTMLText
like image 43
user3305711 Avatar answered Nov 03 '22 10:11

user3305711


This is a much better example. You will not get a null exception, nor late binding.

(And if you use WPF, just add System.Windows.Forms in your reference.)

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)
like image 1
bboyse Avatar answered Nov 03 '22 10:11

bboyse