WindowsMobile5.0におけるXML読み込みについて – プログラミング – Home

通知
すべてクリア

WindowsMobile5.0におけるXML読み込みについて


どらどら
 どらどら
(@どらどら)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

今回MFC スマート デバイス アプリケーションでの開発を
している者です。以下の件が解消できず開発が止まっています。
問題を解決するために、ご教授お願い致します。

■開発環境
・Microsoft Visual Studio 2005(VC++)
・MFCライブラリ
・Windows Mobile 5.0 Pocket PC SDK(CE5.0)
・SDI、フォームビュー

■目的
モバイルのローカルにあるXMLファイルの読み込み・書き込みをする

■問題点
MSXML(※) を使用して C++ から DOM を扱うための処理を実装しましたが
XMLデータ抽出がうまくできません。loadが失敗しているように感じます。

■ロジック(読み出しの例)

#コンストラクタ(COMの初期化)
::CoInitializeEx(NULL,COINIT_MULTITHREADED);

#デストラクタ(COMの終了)
CoUninitialize();

#処理内容 

MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr pNode;

~中略

pDoc.CreateInstance(MSXML2::CLSID_DOMDocument);
pDoc->put_async(VARIANT_FALSE);
pDoc->put_preserveWhiteSpace(VARIANT_TRUE);
pDoc->appendChild(m_pDoc->createProcessingInstruction(xml, version='1.0'
encoding='UTF-8'));
pDoc->load(_T(test.xml));

//ルート要素「test1」要素)ノードリスト取得
MSXML2::IXMLDOMNodeListPtr pNodeList = m_pDoc->getElementsByTagName(_T
(test1));

//ルート要素ノード取得
pNode = pNodeList->Getitem(0);
if(pNode == NULL)
{
return; ←★ここに入ってしまう
}

//子ノードリスト取得
pNodeList = pNode->GetchildNodes();
long lLen = pNodeList->Getlength();

//子ノード数でループ
for(LONG lLoop = 0; lLoop < lLen; lLoop++)
{
CString clStr;
MSXML2::IXMLDOMNamedNodeMapPtr pNodeMap;

//子ノード取得
pNode = pNodeList->Getitem(lLoop);

//要素名(「test2」)チェック
if(pNode->GetnodeName() != _bstr_t(_T(test2)))
{
//「entry」以外なら次要素
continue;
}

}
clStr = static_cast<const char*>(pNode->Gettext());

■その他情報
1.DLLはmsxml3.dllを使用(namespace名はMSXML2)

2.test.xmlの中身
---------------------------------------
<?xml version=1.0 encoding=UTF-8?>
<test1>
<test2 xml:lang= ja>aaaaa</test2>
<test2 xml:lang= ja>bbbbb</test2>
<test2 xml:lang= ja>ccccc</test2>
</test1>

---------------------------------------------------------
以上宜しくお願い致します。


引用解決済
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

一言だけ。

> MSXML(※) を使用して C++ から DOM を扱うための処理を実装しましたが
> XMLデータ抽出がうまくできません。loadが失敗しているように感じます。
「loadが失敗しているように感じます」ではなくてきちんとチェックするべきだと思います。
何故、チェックしていないのでしょう?
loadメソッドは処理ステータスを返却しないのでしょうか?

よく分からない状況であるならしつこい位処理ステータスのチェックをするコードを入れて
何が原因でうまくいっていないのかを探るべきだと思います。
質問するにしても出来うる限りの究明を行った後であるべきです。
また、究明を行ったのであれば、その結果も合わせて公開するべきです。
公開されていない情報は掲示板の読む側には伝わりません。


返信引用
どらどら
 どらどら
(@どらどら)
ゲスト
結合: 18年前
投稿: 2
Topic starter  

PATIOさん。返信ありがとうございます。

HRESULT hr = m_pDoc->load( _T(presence.xml) );
if(FAILED(hr)){
// エラー処理
}

上記load起動後、処理ステータスを、S_OK(0x00000000)で返していますが、
DLLの実行中に例外が発生しているようです。

モジュールの読み込み: mlang.dll
RaiseException: Thread=96b9dbc4 Proc=81a96f20 'XMLTEST.exe'
AKY=00004001 PC=03f785b4(coredll.dll+0x000185b4) RA=800773f4
(NK.EXE+0x000073f4) BVA=00000000 FSR=00000000
TLSKERN_NOFAULT set... bypassing kernel debugger.

もう少し追ってみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました