C++でXML
暇だったのでちょっと書いてしまった。今では反省している。
_bstr_tの使い方がいまいち分かってないので文字列周り適当です。
Livedoorお天気Webサービスから任意の地域の天気を取得するテスト。
#include <iostream> #include <tchar.h> #import "msxml4.dll" named_guids int main(void) { //COM初期化 CoInitialize(NULL); //予報を取得する地域番号取得 TCHAR area[16]; TCHAR url[256]; std::cout << "天気を取得したい地域番号を入力して下さい(東京:63) : "; std::wcin >> area; wsprintf(url, L"http://weather.livedoor.com/forecast/webservice/rest/v1?city=%s&day=tomorrow", area); MSXML2::IXMLDOMDocument2Ptr pDoc; _bstr_t bstrURL = _variant_t(url); //ドキュメントオブジェクトのインスタンスを生成する。 if(FAILED(pDoc.CreateInstance(MSXML2::CLSID_DOMDocument))) { std::cout << "CreateInstance failed." << std::endl; return -1; } //load関数の非同期処理を切る。 pDoc->put_async(VARIANT_FALSE); //XML読み込み if(!pDoc->load(bstrURL) != S_OK) { std::cout << "XML file loading failed." << std::endl; return -1; } //ルート要素を取得 MSXML2::IXMLDOMElementPtr pRoot; pDoc->get_documentElement(&pRoot); if(pRoot == NULL) { return -1; } //タイトルと予報を取得 _bstr_t bstrTitle = pRoot->selectNodes(_bstr_t(L"/lwws/title"))->nextNode()->text; _bstr_t bstrTelop = pRoot->selectNodes(_bstr_t(L"/lwws/telop"))->nextNode()->text; //表示 std::cout << bstrTitle << std::endl; std::cout << bstrTelop << std::endl; //終了処理 pRoot.Release(); pDoc.Release(); CoUninitialize(); return 0; }