OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:651
区分:プログラム  |  分類:VB  |  最終更新日:2016/03/03
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【VB6/VBA】xmlファイルを出力する
関連タグ:vb6, vba, ファイル入出力, xmlファイル, DOM
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 29,919

VB6/VBA で xml ファイルを読み込む方法は以下になります。

 

MSXMLパーサーで出力する

MSXMLパーサーでxmlファイルを出力する場合は、まずMSXMLオブジェクトを生成し、生成したオブジェクトに対して要素を追加し、最後にオブジェクトのSaveメソッドでxmlファイルを出力します。

 

【条件】

  • 「Microsoft XML, v6.0」を参照設定する。(msxml6.dllが必要)(※MSXMLパーサーはいくつものバージョンがあります。MSXMLパーサーについてはこちら(外部サイト)を参照ください。)

 

【サンプルコード】

Public Sub sample()
    Dim strArray() As Variant
    Dim XMLDocument As MSXML2.DOMDocument
    Dim xmlRoot As IXMLDOMNode
    Dim xmlData As IXMLDOMNode
    Dim xmlChildData As IXMLDOMNode
    Dim xmlAttr As MSXML2.IXMLDOMAttribute

    '出力するデータを設定
    strArray = Array(Array("てすと太郎", "東京都港区XX-XX-XX", "111-1111-1111"), _
                     Array("てすと次郎", "埼玉県さいたま市XX-XX-XX", "222-2222-2222"), _
                     Array("てすと三郎", "神奈川県横浜市XX-XX-XX", "333-3333-3333"))

On Error GoTo ERROR_

    'MSXMLオブジェクトを生成
    Set XMLDocument = New MSXML2.DOMDocument

    'XML宣言を生成
    Call XMLDocument.appendChild(XMLDocument.createProcessingInstruction("xml", "version=""1.0"" encoding=""Shift_JIS"""))

    '要素を生成
    Set xmlRoot = XMLDocument.appendChild(XMLDocument.createElement("ROOT"))

    '配列データの数だけ要素を要素に追加
    Dim intId As Integer
    For intId = 0 To UBound(strArray)

        '要素を生成
        Set xmlData = XMLDocument.createElement("DATA")  '要素を生成
        Set xmlAttr = XMLDocument.createAttribute("id")  'id属性を生成
        xmlAttr.NodeValue = intId + 1                    'id属性の値を設定
        Call xmlData.Attributes.setNamedItem(xmlAttr)    '要素にid属性を設定

        '要素の子要素を生成して要素に追加
        Set xmlChildData = xmlData.appendChild(XMLDocument.createElement("Name"))
        xmlChildData.Text = strArray(intId)(0)
        Set xmlChildData = xmlData.appendChild(XMLDocument.createElement("Address"))
        xmlChildData.Text = strArray(intId)(1)
        Set xmlChildData = xmlData.appendChild(XMLDocument.createElement("Tel"))
        xmlChildData.Text = strArray(intId)(2)

        '要素を要素に追加
        Call xmlRoot.appendChild(xmlData)
    Next intId

    'XMLドキュメントを出力
    XMLDocument.Save ("c:\tmp\sample.xml")

ERROR_:

    '各オブジェクトの開放
    If Not XMLDocument Is Nothing Then Set XMLDocument = Nothing
    If Not xmlRoot Is Nothing Then Set xmlRoot = Nothing
    If Not xmlData Is Nothing Then Set xmlData = Nothing
    If Not xmlChildData Is Nothing Then Set xmlChildData = Nothing
    If Not xmlAttr Is Nothing Then Set xmlAttr = Nothing

End Sub

 

【実行結果】

上記プログラムを実行すると、以下のファイルが出力されます。

<?xml version="1.0" encoding="Shift_JIS"?>
<ROOT><DATA id="1"><Name>てすと太郎</Name><Address>東京都港区XX-XX-XX</Address><Tel>111-1111-1111</Tel></DATA><DATA id="2"><Name>てすと次郎</Name><Address>埼玉県さいたま市XX-XX-XX</Address><Tel>222-2222-2222</Tel></DATA><DATA id="3"><Name>てすと三郎</Name><Address>神奈川県横浜市XX-XX-XX</Address><Tel>333-3333-3333</Tel></DATA></ROOT>

※ MSXML パーサーには、各要素を改行する機能はありません。ですので、XML 宣言以降の全ての要素は一行で出力されます。

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