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

[Visual Basic Q & A 掲示板] [過去ログの一覧]


デファイアント 2008/02/07(木) 16:27:27
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/07(木) 16:51:32 <常連>
> 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/07(木) 18:11:23
[[解決]]

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

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

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library