|
XML をファイルのように扱う(3.読込) |
|
ダウンロード : xml 操作サンプル(2008/07/19) ※ Unicode コンパイル環境動作確認済み。 |
|
// インスタンスの作成 MSXML2::IXMLDOMDocumentPtr pDoc(__uuidof(MSXML2::DOMDocument40)); |
|
// 読み込み待ちで文書を読み込む pDoc->put_async(VARIANT_FALSE); VARIANT_BOOL hr = pDoc->load(L"C:\\sample.xml"); if (hr != VARIANT_TRUE) { MessageBox(_T("正常に読み込めません"), _T("構文エラー"), MB_ICONERROR); return; } |
|
// ルートエレメントの取得 MSXML2::IXMLDOMElementPtr peNow = pDoc->documentElement; |
|
MSXML2::IXMLDOMNodeListPtr plNode; plNode = peNow->getElementsByTagName(L"タグ名"); int nNode = plNode->Getlength(); |
|
_variant_t strValue = plNode->Getitem(0)->text; _bstr_t wstrValue(strValue.bstrVal); |
|
for (int i = 0; i < plNode->Getlength(); i++) { MSXML2::IXMLDOMElementPtr peNow = plNode->Getitem(i); // ※ 以後、peNow を使用して再帰する } |
|
// --------------------------------------------------------------- // データを取り出す // out: 取り出したテキストデータ // --------------------------------------------------------------- _bstr_t CFooApp::GetText( MSXML2::IXMLDOMElementPtr element, // 読込元エレメント _bstr_t wstrTag, // 取得タグ名 int nTag // 何番目のデータを取得するか ) { try { MSXML2::IXMLDOMNodeListPtr plNode; plNode = element->getElementsByTagName(wstrTag); if (plNode->Getlength() > nTag) { _variant_t str = plNode->Getitem(nTag)->text; return _bstr_t(str.bstrVal); } } catch (...) { } return L""; } |
|
// インスタンスの作成 MSXML2::IXMLDOMDocumentPtr pDoc(__uuidof(MSXML2::DOMDocument40)); // 読み込み待ちで文書を読み込む pDoc->put_async(VARIANT_FALSE); VARIANT_BOOL hr = pDoc->load(L"C:\\sample.xml"); if (hr != VARIANT_TRUE) { MessageBox(_T("正常に読み込めません"), _T("構文エラー"), MB_ICONERROR); return; } // ルートエレメントの取得 MSXML2::IXMLDOMElementPtr root = pDoc->documentElement; // ルートエレメント名を確認する _variant_t strRootName = root->nodeName; _bstr_t wstrRootName(strRootName.bstrVal); if (wstrRootName != _bstr_t(L"Car")) return; // ルートの各ノード情報を取得する car.wstrName = GetText(root, L"Name"); car.wstrMaker = GetText(root, L"Maker"); // エンジンノードを取得する MSXML2::IXMLDOMNodeListPtr plNode; plNode = root->getElementsByTagName(L"Engine"); if (plNode->Getlength() > 0) { // データがあるか // エンジンのエレメントを取得する MSXML2::IXMLDOMElementPtr peEngine = plNode->Getitem(0); // エンジンの各ノード情報を取得する car.engine.wstrName = GetText(peEngine, L"Name"); car.engine.wstrSize = GetText(peEngine, L"Size"); } // タイヤノードを取得してループする plNode = root->getElementsByTagName(L"Tire"); for (int nTire = 0; nTire < plNode->Getlength() && nTire < 4; nTire++) { // タイヤのエレメントを取得する MSXML2::IXMLDOMElementPtr peTire = plNode->Getitem(nTire); // タイヤの各ノード情報を取得する car.tire[nTire].wstrMaker = GetText(peTire, L"Maker"); car.tire[nTire].wstrType = GetText(peTire, L"Type"); } |
|
|