VBAからXMLを取得したくて方法を検索し、以下のコードで何とか取得ができました。
Sub httpRequest()
Dim HttpReq As MSXML2.XMLHTTP
Dim DomDoc As MSXML2.DOMDocument
Dim targetURL As String
targetURI = "http://www.drk7.jp/weather/xml/14.xml"
'HTTP GET
Set HttpReq = CreateObject("MSXML2.XMLHTTP")
HttpReq.Open "GET", targetURI, False
HttpReq.send (Null)
'XML PARSE
Set DomDoc = CreateObject("MSXML2.DOMDocument")
DomDoc.LoadXML (HttpReq.responseText)
dumpDomDoc DomDoc.ChildNodes
Set HttpReq = Nothing
Set DomDoc = Nothing
End Sub
Sub dumpDomDoc(objNode)
Dim obj
For Each obj In objNode
MsgBox obj.ParentNode.nodeName & " : " & obj.NodeValue
If obj.HasChildNodes Then
dumpDomDoc obj.ChildNodes
End If
Next
End Sub
このコードですと、読み込んだXMLを一行づつメッセージボックスに延々と表示するだけなのですが、
例えば行先のXMLファイルにある<description>と</description>に囲まれた部分だけを変数に格納するにはどのように記述すればよろしいのでしょうか?
ググってはみましたが知識不足の為、解説も理解できず困っております。
大変お手数ですがご教示いただけますようお願いします。
スレ主さんのコードを元にちょこっと書き直してみました。
変数名、オブジェクト名等は適当ですが、動作確認はして
<description>の値が取れることは確認しました。
dumpDomDoc関数は不要だったので消しました。
■サンプル1
Sub httpRequest()
Dim HttpReq As MSXML2.XMLHTTP
Dim DomDoc As MSXML2.DOMDocument
Dim targetURL As String
Dim xmlNodeList As IXMLDOMNodeList ←追加
Dim value As String ←追加
targetURI = "http://www.drk7.jp/weather/xml/14.xml"
'HTTP GET
Set HttpReq = CreateObject("MSXML2.XMLHTTP")
HttpReq.Open "GET", targetURI, False
HttpReq.send (Null)
'XML PARSE
Set DomDoc = CreateObject("MSXML2.DOMDocument")
DomDoc.LoadXML (HttpReq.responseText)
Set xmlNodeList = DomDoc.selectNodes("weatherforecast/description") ←追加
value = xmlNodeList(0).Text ←追加
Set HttpReq = Nothing
Set DomDoc = Nothing
End Sub
またweatherforecastとdescriptionの指定を分けたい場合は、
■サンプル2
Sub httpRequest()
Dim HttpReq As MSXML2.XMLHTTP
Dim DomDoc As MSXML2.DOMDocument
Dim targetURL As String
Dim xmlNodeList1 As IXMLDOMNodeList ←追加
Dim xmlNodeList2 As IXMLDOMNodeList ←追加
Dim value As String ←追加
targetURI = "http://www.drk7.jp/weather/xml/14.xml"
'HTTP GET
Set HttpReq = CreateObject("MSXML2.XMLHTTP")
HttpReq.Open "GET", targetURI, False
HttpReq.send (Null)
'XML PARSE
Set DomDoc = CreateObject("MSXML2.DOMDocument")
DomDoc.LoadXML (HttpReq.responseText)
Set xmlNodeList1 = DomDoc.selectNodes("weatherforecast") ←追加
Set xmlNodeList2 = xmlNodeList1(0).selectNodes("description") ←追加
value = xmlNodeList2(0).Text ←追加
Set HttpReq = Nothing
Set DomDoc = Nothing
End Sub
お礼
丁寧な回答に心から感謝します。 家に帰ったら是非実行させていただきます。 本当にありがとうございました。