zillionプロジェクト開発ブログ MSXMLの講座とかしてみる 忍者ブログ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

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

◎ Post your Comment
Name
Title
E-mail
URL
Comment
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
◎ この記事へのトラックバック
Trackback URL
◎ カウンター
◎ カレンダー
04 2017/05 06
S M T W T F S
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
◎ 最新CM
[10/24 名無しの権兵衛]
[08/30 名無しの権兵衛]
[08/14 no name no future]
[08/05 ゲームサークルEaSt]
[07/28 リオウ]
◎ プロフィール
HN:
kyasbal
年齢:
22
性別:
男性
誕生日:
1994/09/22
職業:
人間
趣味:
趣味ねぇ~~う~ん・・・
◎ ブログ内検索
◎ バーコード
◎ アクセス解析
◎ フリーエリア
◎ フリーエリア
Script: Ninja Blog 
Design by: タイムカプセル
忍者ブログ 
[PR]