2012-04-03 6 views
4

MSHTMLライブラリを使用して、文字列変数に含まれるHTMLの一部を解析したいと考えています。しかし、私はこれを行う方法を理解することはできません。私は、既知のURLが与えられたWebページのコンテンツを簡単に解析できますが、ソースHTMLは直接解析できません。これは可能ですか?もしそうなら、どうですか?MSHTML:CreateDocumentFromUrlの代わりにCreateDocumentFromString

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' 
    .... 

答えて

11

可能です。

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 
+4

ナイス!他の人へのメモ: 'odoc As HTMLDocument'を宣言しようとすると、VBAでコンパイルエラーが発生しました。*コンパイルエラー:Visual Basic *でサポートされていないオートメーションタイプを使用しています。宣言を 'odoc As Object'に変更すると(この回答が明らかに示すように)、問題は修正されました。 – mwolfe02

+0

うん、私は同意する、いい言葉です。 – Fionnuala

+0

@Alex:あなたは気にしないことを望みますが、あなたの答えを編集して、図書館のレイトバインドを参照する方法を含めるようにしました。それは明らかではないし、ウェブを介して見つけるには時間がかかった。 – mwolfe02

1

これははるかに良い例です。ヌル例外や遅延バインディングはありません。

(あなたがWPFを使用する場合は、ちょうどあなたの参照にSystem.Windows.Formsを追加します。)このようなアクセス・リッチテキストこのそれをしないようにまっすぐにHTMLコードの場合

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) 
+0

vb6、vbaではなく、これはvbです私は思う。 –

0

Dim HTMLDoc As New HTMLDocument 

HTMLDoc.Body.innerHTML = strHTMLText