- ベストアンサー
Excel-VBAでXMLの複数ノードの取り出し
- Excel2007のVBAでXMLの扱いがわかっておらず、複数のItemノードからASINを取得するプログラムがうまくいかない。
- MSXML2を使おうとしたらExcel2007では使えず、XMLDOMは古いため、MSXML2を使用する方法を知りたい。
- XMLを取得するまでは成功しており、selectSingleNodeではうまく取得できるが、SelectNodesを使った場合に問題がある。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず下記で111,222,333が取得できました。ご参考まで。 当方、Windows7Home64bit/xl2010です。 環境は異なりますが、MSXML3あたりでも動くコードだと思います。 コード中XPATHはItemLookupResponseなのに、テストデータの方はItemSearchResponseになっていますが大丈夫ですか? 'MSXML6に参照設定 Sub test() Dim XML As New MSXML2.DOMDocument60 Dim xmlItems As IXMLDOMNodeList Dim objPrice As IXMLDOMNode XML.async = False ' XML.validateOnParse = False ' XML.resolveExternals = False ' XML.preserveWhiteSpace = True XML.Load GetDesktopPath & "\test.xml" 'お示しのデータをコピペして保存 Set xmlItems = XML.SelectNodes("ItemSearchResponse/Items/Item") For Each objPrice In xmlItems ' ASIN If Not objPrice.SelectSingleNode("ASIN") Is Nothing Then Debug.Print objPrice.SelectSingleNode("ASIN").Text End If Next '直接ASINまで指定しても良いと思うが... ' Set xmlItems = XML.SelectNodes("ItemSearchResponse/Items/Item/ASIN") ' If xmlItems.Length > 0 Then ' For Each objPrice In xmlItems ' Debug.Print objPrice.Text ' Next ' End If Set XML = 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
お礼
プログラムまで記載頂きありがとうございました。SelectNodesの考え方はあっているようですね。 参考になりました。根本的に何かができていないようですので、頂いたプログラムで勉強します。