hiroumaumaさんのブログでは、PSPプログラミング講習が人気を博しているようです。
残念ながら僕はPSPに関してプログラムを組んだことはありません。
ソースを見たことならありますが・・・
なので、MSXML6を利用した、XMLの内容の取得をしてみます。
内部を識別する処理はまだ制作していませんが、ここでは、OEのアップデート処理に使用されているソースを基に解説します。(ほとんどXPathの解説になると思います。
なんか、スクショが切れてしまっていますが、SULTはHRESULTのですね、{も切れて映っていません・・・
picasaweb.google.com/112707182961116286529/HmIZeB#5495050720645511426
ヘッダ部分はこうなってます
MSXML6において必要なのはこの3つです。
上の二つはOEの内部的な物なのでお気になさらずに。
picasaweb.google.com/112707182961116286529/HmIZeB#5495051393212118418
ヘッダの、#importだという事に気を付けてください。#include ではないです。
また、#importの後に<msxml6.h>をインクルードしないとエラーになるそうです。
一応、using namespace MXXML2;をしておく方がいいでしょう。
ただ、型があいまいですというエラーが出ることがあります。
この場合は、あきらめて名前空間から型やメソッドを指定しましょう。
ちなみにこのソース、MSXML2::となっているのはわかりやすくするためです。当然、using namespaceであらかじめ断られているので、このままでも使用できます。
さて、実際の処理のほうを見てみましょう。
MSXML2::IXMLDOMDocument2Ptr Domp;
Domp.CreateInstance(__uuidof(MSXML2::DOMDocument60));
で初期化しています。msxml6を使うなら、このままでいいでしょう。
if((Domp->load(_variant_t("Updata.xml"/*実際はサーバー上のアドレスを指定します。*/))==FALSE)){/*MB_RETRYCANCEL*/
MessageBox(NULL,_T("アップデートの確認に失敗しました。\n\nネットワークの接続の有無の確認及び公式サイトにて、パッチ等の配布がされていないかチェックしてください。"),_T("アップデーターエラー"),MB_ICONERROR|MB_CANCELTRYCONTINUE|MB_HELP);
return E_FAIL;
}
まず、if分の中でロードを試みて、FALSEかどうか判断していますが、MFCでデバッグならば、ASSERTでも構わないでしょう。長いので独自に#defineで作ってみたりとかでも、少し見栄えが良くなります。
メッセージボックスの中身は・・・・気にしないでください。自分で好きな物をどうぞ。
さて、実際にエレメントの中身を読み込んでみましょう。
MSXML2::IXMLDOMNodePtr pElement=Domp->documentElement;
CComPtr<MSXML2::IXMLDOMNode> pNode = FALSE;
MSXML2::IXMLDOMNodePtr result;
result = pElement->selectSingleNode("/updata/FullUpdate/DLAdd");
AfxMessageBox(result->text);
これは,MFCで組まれているので、AfxMessageBoxで簡易的にやっていますが、使わないならば、MessageBoxやprintfでも、確認するだけであれば代用が効きます。
selectSingleNode("/updata/FullUpdate/DLAdd");
問題はこの部分です。この部分で、XMLのどこを取得するのかをXPathで決めています。
OEのこの部分は、最新版のダウンロードアドレスを取得しているところです。
ちょっと長いですが、Updata.xmlの内容は以下のようになっています。
<?xml version="1.0" encoding="utf-8"?>
<updata>
<PachedUpdate>
<Docs name="Editer">
<DLAdd>
http://www
</DLAdd>
<id>
1.00
</id>
</Docs>
<Docs name="Runtime">
<DLAdd>
http://www
</DLAdd>
<id>
1.00
</id>
</Docs>
</PachedUpdate>
<FullUpdate>
<DLAdd>
サービスは停止しました。(^ω^)
</DLAdd>
<id>
1.00
</id>
</FullUpdate>
</updata>
実際はサービスは停止しましたのところに、DL先のアドレスがあり、ダウンロードされるように作っているのですが、とりあえず表示するだけなので、これを取得してみます。
picasaweb.google.com/112707182961116286529/HmIZeB#5495058465513221266
まあ、こんな感じですね。
さりげなくスクショ公開しましたが・・・
ちゃんと中身が表示されています。
変えればこんな風になります。
picasaweb.google.com/112707182961116286529/HmIZeB#5495059856599499714
さて、ボケはこのくらいにして、開発を急がなければ~
[1回]
PR