MSXML使ってみた

現在XMLの勉強中。
MSXMLを使ってXMLの内容を読み込んで表示するだけのサンプルを作ってみました。
なお、このソースコードの利用は自己責任でお願いします。

// MSXMLライブラリのインポート。
#import <msxml6.dll>

int main()
{
	// 内容を読み込んでコンソールに表示するプログラム

	// COMの初期化
	if ( FAILED(CoInitialize(NULL)) ) {
		return -1;
	}

	VARIANT_BOOL fSuccess;
	MSXML2::IXMLDOMDocument2Ptr pDoc;
	pDoc.CreateInstance( __uuidof(MSXML2::DOMDocument60) );

	pDoc->put_async( VARIANT_FALSE );		// 同期読み込みに設定
	pDoc->put_validateOnParse( VARIANT_FALSE );	// 妥当性確認しない
	fSuccess = pDoc->load( _variant_t( "sample.xml" )); 

	if ( fSuccess != VARIANT_TRUE ) {
		pDoc.Release();
		CoUninitialize();
		return -1;
	}

	MSXML2::IXMLDOMElementPtr pRoot;
	char szText[4096];
	bstr_t bstrWork;	// BSTRはCOMで利用される一般的な文字列。そのスマートポインタがbstr_t。

	pDoc->get_documentElement( &pRoot );		// XMLドキュメントツリーのルートを取得
	pRoot->get_text( &bstrWork.GetBSTR() );		// 子ノードの内容をまとめた文字列を取得

	sprintf_s(szText, 4096, "%s", (LPCSTR)bstrWork);	// bstr_tをcharに変換

	printf( "%s", szText );

	// 後始末
	pRoot.Release();
	pDoc.Release();

	// COMの後始末
	CoUninitialize();

	return 0;
}