プロが教えるわが家の防犯対策術!

お世話になっております。
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>

A 回答 (2件)

とりあえず、


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

補足日時:2013/08/23 16:59
    • good
    • 0

#1です。


当方Access2010ですが、単純に標準モジュールにコードをコピペし、Microsoft XML v6.0に参照設定し、XMLをデスクトップに置いて実行すると、
item_title1
item_title2
が取得できました。質問者様のAccessのバージョンが不明ですが、Accessの機能は使っていないので、どのバージョンでも変わらないと思います。

エラーNo. -2147024809を検索してみましたが、それらしい情報がヒットしません。
簡単なモデルで試してみて、うまく行ったら肉付けをしていく事をお勧めします。
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。
何度か試したところ突然できるようになりました。
原因は不明です。
ご回答いただきありがとうございました。

お礼日時:2013/08/26 05:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!