fc2ブログ

お天気アプリ制作 #02 - XMLの読み込みを行う


 前回、webよりXMLファイルを取得するテストが出来ましたので、引き続き取得したXMLからさらに情報を取得するサンプルを作ってみた。


 XMLの操作にはXMLパーサーと呼ばれるものを使用します。Windows・WindowsMobileで共通して使用できるものとして、MSXMLというCOMコンポーネントがあるのでそれを使用します。

 使用するキーワードとしては、こんな感じかな。

MSXML2::IXMLDOMDocumentPtr
MSXML2::IXMLDOMNodeListPtr
MSXML2::IXMLDOMElementPtr


初期化
 まずCOMの初期化から。
 大体、アプリケーションクラスのInitInstanceで行っておけばよいのだけれども、読み込み部分をスレッドにする場合は、スレッドの先頭と最後で行う必要あり。

// COMの初期化 for MSXML
::CoInitialize(NULL);

// XMLの処理

// COMの終了 for MSXML
::CoUninitialize();


XMLファイルの読み込み
ファイル名を渡すだけですね。
// インスタンスの作成
MSXML2::IXMLDOMDocumentPtr pDoc(__uuidof(MSXML2::DOMDocument40));

//XMLファイルの読み込み
LP_WEZ_DATA pWezDat = m_pWezData->GetWezData();
pDoc->put_async(VARIANT_FALSE);
VARIANT_BOOL hr = pDoc->load( pFile);
if (hr != VARIANT_TRUE)
{ // エラー
  return FALSE;
}


XMLの操作
 XMLは基本的に階層構造になっているので、その階層をもぐっていく必要があります。
 IXMLDOMDocumentはXML全体を保持するもので、そこから、各ノードへもぐっていきます。
// ルートエレメントの取得
MSXML2::IXMLDOMElementPtr peRoot = pDoc->documentElement;
 これで一番元になるエレメントを取得できます
 ここから、下の階層のノードへともぐっていくことに。

MSXML2::IXMLDOMNodeListPtr plChannel;
plChannel = peNow->getElementsByTagName(_T("channel"));
 channelは、取得したXMLの一番上の階層にあるもので、とりあえずそこにもぐります。
 XMLでは、一つの階層に同じ名前のノードを複数置けるため、上記の関数ではノードのリストが取得できます。ノードのリストなので、ここから任意のノード(エレメント)を選択します。
MSXML2::IXMLDOMElementPtr peChannel = plChannel->Getitem(0);

 ここでやっとchannelのノード(エレメント)に到達です。このポインタはルートのpeRootと同じ型ですので、ここらからさらに下の階層に潜りたい場合は、また同じ操作を行えばOKです。

 IXMLDOMElementPtrに対しては、
Getitem()
getAttribute()
 等の関数が使用でき、ノード(エレメント)下に設定されている情報を取得することが出来ます。情報の取得だけならば、これらの関数の組み合わせだけで何とかなりますね。

 とりあえず、ここまでの処理でWEBからRssの取得、取得したRssから情報を抜き出す、まで作成できました。
天気を取得するサイトは、ウェザーマップ(http://www.weathermap.co.jp/)を使用しました。一週間の天気・降水確率・気温などが取得できるので、必要そうな情報はそろえられそうです。

テーマ:プログラミング - ジャンル:コンピュータ

ブログランキング・にほんブログ村へ

2008.09.18 | Comments(0) | Trackback(0) | Mobile プログラミング

«  | HOME |  »

02 | 2024/03 [GO]| 04
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -

最近の記事一覧 カテゴリ一覧 コメント一覧 トラックバック一覧 プロフィール リンク一覧
[カテゴリ]
WEBコンサルティング・ホームページ制作のバンブーウエイブ

ブログ内検索

ブロとも申請フォーム

この人とブロともになる

カスタム検索