MSXML を利用して XMLファイル を解析するには

解説

MSXML を利用して XMLファイル を解析する方法をまとめます。

便利機能

・IXMLDOM~Ptr を使う
MSXMLの処理においては、IXMLDOM~型のオブジェクトを扱います。
IXMLDOM~型には、型名の語尾にPtrが「付く」型と、「付かない」型があります。
型名の語尾にPtrが「付く」型は、スマートポインタ型なので、特に理由がない限り、型名の語尾にPtrが「付く」型を使います。
型名の語尾にPtrが「付かない」型を使う場合には、オブジェクトが不要になった際には Release関数を呼び出す、型変換は QueryInterface関数を通して行う、等が必要になります。
・CComVariant、CComBSTRを使う
MSXMLの処理においては、BSTR型やVARIANT型のオブジェクトを扱います。
BSTR型やVARIANT型には、ラッパークラスである、CComVariant型、CComBSTR型があります。特に理由がない限り、ラッパークラスである、CComVariant型、CComBSTR型を使います。
BSTR型やVARIANT型を使う場合には、領域の確保処理の記述、領域の開放処理の記述、型変換処理の記述、等が必要になります。

準備

・MSXML.DLL のインポート
#import "msxml.dll" named_guids raw_interfaces_only
をファイルヘッダー部に追加します。
これにより、MSXMLの処理が使えるようになります。
・import ディレクティブ:コンパイラは、指定されたファイルを利用可能にするヘッダーファイルを自動生成し、生成されたヘッダーを読み込みます。
・msxml.dll:msxml処理モジュールファイル。MSXML.DLLには、複数のバージョンがあります。必要に応じて、msxml.dll を msxml2.dll , msxml3.dll , msxml4.dll , msxml5.dll , msxml6.dll 等に置き換えます。
・named_guidsオプション:コンパイラは、指定されたファイルを利用可能にするヘッダーファイルに、GUID型の CLSIDやIIDの定義を生成します。
・raw_interfaces_onlyオプション:コンパイラは、指定されたファイルを利用可能にするヘッダーファイルにCOMインターフェイスの定義を生成します。
・atlbase.h のインクルード
#include <atlbase.h>
をファイルヘッダー部に追加します。
これにより、CComVariant型、CComBSTR型が使えるようになります。
・COMの初期化処理、COMの終了処理
MSXMLの処理を使うためには、COMの初期化が必要です。
CoInitialize(NULL);
をアプリケーションの開始処理部に、
CoUninitialize();
をアプリケーションの終了処理部に、
追加します。

手続き

・DOMドキュメントの作成
IXMLDOMDocumentPtr::CreateInstance 関数を利用し、IXMLDOMDocumentPtrオブジェクトを作成する。
・XMLファイル読み込み
IXMLDOMDocumentPtr::load 関数を利用して、ファイルを読み込みます。
load 関数に先立って、IXMLDOMDocumentPtr::put_async( VARIANT_FALSE ) を呼び出し、load関数が、ロードを完了するまで待つようにします。
・ノード、属性の探索、値の取得
各種 get~関数を利用して、ノード、属性を探索し、また、値の取得をします。

サンプルコード

ダウンロード

サンプルプロジェクト