お世話になっております。
Access VBAでRSSを読み込み指定した要素の値を取得したいのですが、ググってもよく分からず
どのようにすれば良いのか分からないので教えてください。
下記XMLの「item」の値を取得しフィールドへ値を挿入したいのです。
item_title1を読み込んだ後に次に別のレコードとしてitem_title2を読みたいといった形です。
初心者で言葉足らずの部分があると思いますが、ご教授の程よろしくお願いします。
VBA本文
Sub readXml()
Dim XDoc As MSXML2.DOMDocument
Dim node As MSXML2.IXMLDOMNode
Set XDoc = New MSXML2.DOMDocument
If XDoc.Load(CurrentProject.Path & "\" & "a.xml") = False Then
MsgBox "読み込み失敗"
Exit Sub
End If
Dim rs As New ADODB.Recordset
'データベースにデータを挿入する。
rs.Open "test", CurrentProject.Connection, , adLockOptimistic
rs.AddNew
For Each node In XDoc.selectNodes("rss/content/title")
rs!title = node.Text
rs.Update
rs.Close
End Sub
取込元XML(RSS)ソース
<?xml version="1.0"?>
<rss version="2.0">
<content>
<title>test/title>
<language>ja</language>
<item>
<title>item_title1</title>
</item>
<item>
<title>item_title2</title>
</item>
</content>
</rss>
とりあえず、
item_title1
item_title2
を取得するところのみです。
時間が無いのでエクセルで試しています。ご参考まで。
Sub readXml()
Dim XDoc As MSXML2.DOMDocument
Dim i As Long
Dim root As IXMLDOMElement
Dim retNode As IXMLDOMNodeList
Set XDoc = New MSXML2.DOMDocument
If XDoc.Load(GetDesktopPath & "\" & "test.xml") = False Then
MsgBox "読み込み失敗"
Exit Sub
End If
Set root = XDoc.DocumentElement
Set retNode = root.SelectNodes("/rss/content/item/title")
For i = 0 To retNode.Length - 1
Debug.Print retNode.Item(i).Text
Next i
Set XDoc = Nothing
End Sub
Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function
補足
ご回答いただきありがとうございます。 いただいたソースをもとにAccess VBAで実行してみましたが、イミデイトのエラーが出てしまっています。 どのような原因&改善策が考えられるでしょうか? よろしければ、教えてください。 よろしくお願いします。 -2147024809 / パラメーターが間違っています。 行 :0 , カラム :0 内容 : ファイル(URL) : ファイル先頭からの位置 :0