VB6/VBA で xml ファイルを読み込む方法は以下になります。
なお、検証で使用する xml ファイルは以下内容にて作成されていると仮定します。
【検証用 xml ファイル内容】
<?xml version="1.0" encoding="Shift_JIS"?>
<ROOT>
<INFO>
<DATE>2014/01/02</DATE>
<CUSTOMER>サンプル会社</CUSTOMER>
</INFO>
<DATA>
<PRODUCTINFO>
<SERIALNO>0001</SERIALNO>
<PRODUCTNAME>製品1</PRODUCTNAME>
<PRICE>500</PRICE>
<STOCK>10</STOCK>
</PRODUCTINFO>
<PRODUCTINFO>
<SERIALNO>0002</SERIALNO>
<PRODUCTNAME>製品2</PRODUCTNAME>
<PRICE>1000</PRICE>
<STOCK>20</STOCK>
</PRODUCTINFO>
</DATA>
</ROOT>
MSXMLパーサーで読み込む
MSXML パーサーで xml ファイルを読み込む場合は、まず MSXML オブジェクトを生成し、生成したオブジェクトの Load メソッドで指定の xml ファイルを読み込みます。次に、オブジェクトのメソッドを使って目的のノード情報を抽出し、最後にオブジェクトを開放するといった処理を行います。
【条件】
- 「Microsoft XML, v6.0」を参照設定する。(msxml6.dllが必要)(※MSXML パーサーはいくつものバージョンがあります。MSXML パーサーについてはこちら(外部サイト)を参照ください。)
【サンプルコード】
Public Sub sample1()
Dim XMLDocument As MSXML2.DOMDocument
Dim xmlDate As IXMLDOMNode
Dim xmlCustomer As IXMLDOMNode
Dim xmlDataNode As IXMLDOMNode
On Error GoTo ERROR_
'MSXMLオブジェクトを生成し、xmlファイルをロード
Set XMLDocument = New MSXML2.DOMDocument
XMLDocument.async = False
XMLDocument.Load ("C:\tmp\sample.xml")
If (XMLDocument.parseError.ErrorCode <> 0) Then 'ロード失敗
Debug.Print XMLDocument.parseError.reason 'エラー内容を出力
GoTo ERROR_
End If
'<INFO>ノードの各情報を取得(検索指定)
Set xmlDate = XMLDocument.SelectSingleNode("//ROOT/INFO/DATE")
Set xmlCustomer = XMLDocument.SelectSingleNode("//ROOT/INFO/CUSTOMER")
Debug.Print xmlDate.Text '<DATE>情報を出力
Debug.Print xmlCustomer.Text '<CUSTOMER>情報を出力
'<DATA>ノードデータを取得
Set xmlDataNode = XMLDocument.SelectSingleNode("//ROOT/DATA")
'<DATA>ノードの子要素をループで抽出
Dim Node As IXMLDOMNode
For Each Node In xmlDataNode.ChildNodes
'<PRODUCTINFO>ノードの子要素を出力
Debug.Print Node.ChildNodes(0).Text '<SERIALNO>情報を出力
Debug.Print Node.ChildNodes(1).Text '<PRODUCTNAME>情報を出力
Debug.Print Node.ChildNodes(2).Text '<PRICE>情報を出力
Debug.Print Node.ChildNodes(3).Text '<STOCK>情報を出力
Next
ERROR_:
'各オブジェクトの開放
If Not XMLDocument Is Nothing Then Set XMLDocument = Nothing
If Not xmlDate Is Nothing Then Set xmlDate = Nothing
If Not xmlCustomer Is Nothing Then Set xmlCustomer = Nothing
If Not xmlDataNode Is Nothing Then Set xmlDataNode = Nothing
End Sub
上記サンプルでは、ドキュメント内に一つしかない<INFO>ノード情報は SelectSingleNode メソッドで検索抽出し、複数存在する<DATA>ノード以下の情報はループで ChildNodes を参照するようにしています。