XMLDOMを使用してXMLの情報を読み込む
【概要】
IXMLDOMDocument : XML文章を操作するための最上位オブジェクト
これは、XMLのRootを示します。
IXMLDOMNodeList : XML階層のポインタが格納され、その階層に含まれる
全ノードの情報を持ちます。
これらに含まれるCOMインターフェイスに付いては、OLE/COM Object Viewer
でMSXML4を参照して下さい。
【サンプル】
以下のコードは、添付されているサンプルです。
これは、このサンプルのzipに含まれる "sample.xml" を読み込みます。
//Microsoft.XMLDOMを使用するためのタイプライブラリを取り込む
#import "C:\WINDOWS\SYSTEM32\msxml4.dll"
//実行用コード
void CXmlsapDlg::OnButton1()
{
long cnt1, cnt2;
int i, j;
_bstr_t root, child1, child2, buf;
COleVariant oleBuf;
CStringArray arryBuf;
CString strBuf;
char buffer[64];
//------------------------------
using namespace MSXML2; //名前空間の定義
IXMLDOMDocumentPtr pXML;
//-----------------------------------------
//エディット・ボックスからXMLファイル名を取得
CEdit* myEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
myEdit1->GetWindowText(strBuf);
//------------------
//XMLの読み込み
pXML.CreateInstance(L"Microsoft.XMLDOM");
oleBuf.SetString(strBuf, VT_BSTR);
pXML->load(oleBuf);
//----------------------------
//XMLのノードと内容の取り込み
//Rootノード(タグ)名の取得
root = pXML->documentElement->nodeName;
strcpy(buffer, root);
arryBuf.Add(buffer);
TRACE("%s\n",buffer);
//RootのChild Node@を取得
IXMLDOMNodeListPtr pChildNod1Lst1 = pXML->documentElement->childNodes;
//同一階層のノード数を取得
cnt1 = pChildNod1Lst1->length;
for(i = 0; i < cnt1; i++){
//Child Node@のノード名を取得
child1 = pChildNod1Lst1->item[i]->nodeName;
strcpy(buffer, child1);
arryBuf.Add(buffer);
TRACE("%s\n",buffer);
//Child Node@のChild NodeAを取得
IXMLDOMNodeListPtr pChildNod1Lst2 = pChildNod1Lst1->item[i]->childNodes;
cnt2 = pChildNod1Lst2->length;
for(j = 0; j < cnt2; j++){
//Child NodeAのノード名を取得
child2 = pChildNod1Lst2->item[j]->nodeName;
strcpy(buffer, child2);
arryBuf.Add(buffer);
TRACE("%s\n",buffer);
//Child NodeAで記述されている内容を取得
buf = pChildNod1Lst2->item[j]->text;
strcpy(buffer, buf);
arryBuf.Add(buffer);
TRACE("%s\n",buffer);
}
}
//MessageBoxへ取得結果を出力
strBuf = arryBuf.GetAt(0);
for(i = 1; i < arryBuf.GetSize(); i++){
strBuf += "\n" + arryBuf.GetAt(i);
}
AfxMessageBox(strBuf);
}