OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:650
区分:プログラム  |  分類:VB  |  最終更新日:2014/12/19
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【VB6/VBA】xmlファイルを読み込む
関連タグ:vb6, vba, ファイル入出力, xmlファイル
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 92,796
VB6関連技術まとめ > 【VB6/VBA】xmlファイルを読み込む

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 を参照するようにしています

関連記事
外部リンク
- 記事検索 -