[VB] MSXML を使って XML ファイルを作成・出力する方法

转‘

VB や VBA から XML ファイルを作成・出力する方法の1つに、Microsoft XML パーサー(MSXML)を使う方法があります。

 

MSXML には数多くのバージョンが存在します。

 

それらは IE や Office などに含まれる形で PC にインストールされているわけですが、バージョンによってファイル名が異なる場合があるため、複数のバージョンが混在していることもあります。

 

Microsoft XML パーサー (MSXML) のバージョン一覧

 

ここでは無難なところで、Microsoft XML Version 2.0 (Msxml.dll) を使います。

 

簡単なサンプルコードを以下に示します。


Sub main()

    Dim xmlDoc      As MSXML.DOMDocument                'XMLドキュメント
    Dim xmlPI       As IXMLDOMProcessingInstruction     'XML宣言
    Dim node(3)     As IXMLDOMNode                      '要素
    Dim attr        As MSXML.IXMLDOMAttribute           '属性

    Set xmlDoc = New MSXML.DOMDocument                  'XMLドキュメントを作成します。

    'XML宣言を追加します。
    Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""Shift_JIS"""))

    '<Root>要素を追加します。
    Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "Root", ""))

    '<Customer>要素を追加します。
    Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Customer", ""))

    'id属性を追加します。
    Set attr = node(2).Attributes.setNamedItem(xmlDoc.createNode(NODE_ATTRIBUTE, "id", ""))
    attr.nodeValue = "1"
 
   '<Name>要素を追加します。
    Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Name", ""))
    node(3).Text = "John"

   '<Address>要素を追加します。
    Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Address", ""))
    node(3).Text = "New York"

   '<Tel>要素を追加します。
    Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Tel", ""))
    node(3).Text = "000-0000-0000"

    '<Customer>要素を追加します。
    Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Customer", ""))

    'id属性を追加します。
    Set attr = node(2).Attributes.setNamedItem(xmlDoc.createNode(NODE_ATTRIBUTE, "id", ""))
    attr.nodeValue = "2"
 
   '<Name>要素を追加します。
    Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Name", ""))
    node(3).Text = "Paul"

   '<Address>要素を追加します。
    Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Address", ""))
    node(3).Text = "London"

   '<Tel>要素を追加します。
    Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "Tel", ""))
    node(3).Text = "111-1111-1111"

    'XMLドキュメントの出力
    xmlDoc.Save ("customer.xml")
    
End Sub


VB や VBA で Microsoft XML Version 2.0 (Msxml.dll) を使用するには、まず[参照設定]で "Microsoft XML, version 2.0"を参照するよう設定します。

 

その上で、上記のサンプルコードのような手順で XML DOM を使用して XML 文書を作成し、ファイルに出力します。


上記のサンプルコードから出力される XML ファイルの中身は以下のとおりになります。

 

<?xml version="1.0" encoding="Shift_JIS"?><Root><Customer id="1"><Name>John</Name><Address>New York</Address><Tel>000-0000-0000</Tel></Customer><Customer id="2"><Name>Paul</Name><Address>London</Address><Tel>111-1111-1111</Tel></Customer></Root>


せめて改行とインデントくらいしてくれよといいたくもなりますが、一応 XML 文書としては正しい形で出力されます。


文字コードは XML 宣言で encoding="Shift_JIS" としているため、SJIS です。他のエンコーディングを指定すればそれに応じた文字コードで出力されます。(デフォルトは UTF-8)

 

また、サニタイジング処理も勝手にやってくれます。

 

この辺りは、XML パーサならではの利点ですね。


API の使い方を覚えるのが面倒なので、ちょっとした XML ファイルくらいなら地道に文字列を切ったり貼ったりして力技で作ってしまいたくなりますが、いったん覚えてしまえば、くだらないことを気にせず XML ファイルの構造のみに思考を集中できるため便利です。

 

[参考]
初心者のための XML DOM ガイド

XML データのエンコード

posted @ 2013-11-27 10:46  博到用时方恨少  阅读(249)  评论(0编辑  收藏  举报