winhttpオブジェクトにて取得したhttp文書のdom化

解決


デファイアント  2008-02-08 01:27:27  No: 100243

sslの件では大変ありがとうございました。
連続質問で恐縮ですが、

winhttpにて取得したhtmlページがあります。
これをdom化して、各ノード(タグ)の情報を取得することは可能なのでしょうか
dim winHTTP as object
Set winHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")

Dim XMLDocument As MSXML2.DOMDocument
Set XMLDocument = New MSXML2.DOMDocument

winHTTP.Open GET, strURL, False
winHTTP.Send ()
Byte() = winhttp.resposeBody
---- バイト文字列をファイルに保存---
debug.print XMLDocument.Load(保存ファイル名) 
ここまで

細かい部分は省略しています。

ポイント
(1)winhttpで取得できる形式は、
winHTTP.ResponseBody
winHTTP.ResponseStream
wihHTTP.ResponseTextで、responseXMLがない
(2)取得するドキュメントはHTML文書で、XML文書ではない
(3)responseBodyで得られるバイナリ文字列を一度ファイルに保存して
そのファイルを読んだところ.PerseError -1072896760 でした

とくにMSXML2.DOMDocumentにはこだわっていません。
webBrowserのDocumentオブジェクトのように使用できれば
それでよいです。また、ファイルに保存しない方法があればなおよいです。

なにとぞよろしくお願い致します


魔界の仮面弁士  2008-02-08 01:51:32  No: 100244

> wihHTTP.ResponseTextで、responseXMLがない
単純に、ResponseStream では駄目なのでしょうか?
得られたストリームを、そのままパーサに読ませるだけで良いような…。

> 取得するドキュメントはHTML文書で、XML文書ではない
であれば、MSXML では駄目でしょう。MSHTML を使ってみてください。

> そのファイルを読んだところ.PerseError -1072896760 でした
非 XML 文書だからでしょう。

とりあえず、こんな感じ。
参照設定用のタイプライブラリは、別途用意してください。

Dim doc As MSHTML.HTMLDocument
Set doc = New MSHTML.HTMLDocument
Dim stm As IPersistStreamInit
Set stm = doc
stm.Load wihHTTP.ResponseStream
Set stm = Nothing

Debug.Print doc.documentElement.outerHTML


デファイアント  2008-02-08 03:11:23  No: 100245

弁士様、いつもありがとうございます
doc html vb6 等で検索したのですがなかなか出てこず、、
IPersisStremaInitだと一発ですね。

とりあえず先にすすめます。
本当にありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加