
No.2ベストアンサー
- 回答日時:
当方の環境では msxml4.dll が無いので
msxml3.dllで調べてみましたが 同様の症状になりませんでした
// タグ名"name"の要素を取得
// GetItemを1にして
// <name>test1</name> を取得
MSXML2::IXMLDOMElementPtr pname=pDoc->getElementsByTagName("name")->Getitem(1);
// "name"要素の属性をチェック
// _variant_t() を追加
_variant_t varlang=pname->getAttribute( _variant_t("lang") );
で GetItem(1)として 実行しましたが
valangには VT_NULLが取得できました
アサーションにはならずにです
データはお示しのmode.xmlです
IXMLDOMDocumentのインスタンス化は
MSXML2::DOMDocument26
MSXML2::DOMDocument30
MSXML2::DOMDocument60
で行いました
MSXML2::DOMDocument40は登録されていないとなってpDocがNULLのままでした
参考になれば幸いです
_variant_tにはvtってのがあるんですね。
varlang.vt==VT_NULLでチェックするように出来ました。
どうも有り難うございました。
No.1
- 回答日時:
現象を再現できる必要最低限のコードとデータファイルを示しましょう
プログラミングスタイルも明記しましょう C++/CLIなのかWindowsSDKなのかとか
IXMLDOMNodeなら get_attributesでIXMLDOMNamedNodeMapを取得
get_NamedItemで取得する際の戻り値が S_FAILEかどうかで判定できます
下記サンプルは MFCを使用しています
HRESULT hr;
IXMLDOMDocument* pDoc = NULL;
IXMLDOMNodeList* pList = NULL;
IXMLDOMNode* pNode = NULL, *pItem = NULL;
IXMLDOMNamedNodeMap* pMap = NULL;
hr = CoCreateInstance( CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument, (void**)&pDoc );
CComVariant va("Sample.xml"), vb( FALSE );
pDoc->put_async( vb.boolVal );
pDoc->load( va, &vb.boolVal );
va = CComVariant("node");
pDoc->getElementsByTagName( va.bstrVal, &pList );
pList->get_item( 0, &pNode );
pNode->get_attributes( &pMap );
// nameの代わりに name1の取得を試みる
va = CComVariant( "name1" );
hr = pMap->getNamedItem( va.bstrVal, &pItem );
if ( hr == S_OK ) {
pItem->get_nodeValue( &va );
}
--- sample.xml ---
<?xml version="1.0" encoding="utf-8"?>
<myDS>
<node name="sample1" test="abc"></node>
<node name="sample2" test="abc"></node>
</myDS>
すみません詳細を記述します。
プロジェクトは、Win32コンソールアプリケーションで作っています。
#include<stdio.h>
#import "msxml4.dll" named_guids
int main(void){
int i,temp;
VARIANT_BOOL hr;
MSXML2::IXMLDOMDocument2Ptr pDoc;
MSXML2::IXMLDOMElementPtr pRoot,dir;
MSXML2::IXMLDOMNodeListPtr nodeptr;
/////////XMLからデータ呼び出し///////
CoInitialize(NULL);//COM初期化
pDoc.CreateInstance( __uuidof(MSXML2::DOMDocument40));
// 読み込み待ちで文書を読み込む
pDoc->put_async(VARIANT_FALSE);
hr = pDoc->load(L"model.xml");
if (hr != VARIANT_TRUE) {
printf("正常に読み込めません。構文が間違っているか、ファイルが存在しない可能性があります。\n");
//MessageBox(_T("正常に読み込めません"), _T("構文エラー"), MB_ICONERROR);
return 1;
}
pRoot=pDoc->documentElement;
//XPathを使うように設定
pDoc->setProperty(_bstr_t(L"SelectionLanguage"),variant_t(L"XPath"));
// タグ名"name"の要素を取得
MSXML2::IXMLDOMElementPtr pname=pDoc->getElementsByTagName("name")->Getitem(0);
// "name"要素の属性をチェック
_variant_t varlang=pname->getAttribute("lang");
wprintf(L"lang: %s\n",varlang.bstrVal);
getchar();
return 0;
}
----model.xml----
<?xml version="1.0" encoding="utf-8"?>
<root>
<name lang="Japanese">test0</name>
<name>test1</name>
</root>
という感じで、属性を取得しています。
MFCとかはあまりくわしくないので、このソースに組み込めるチェック方法を教えていただけるとありがたいです。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- アプリ swiftでスマホアプリを開発した時の動作確認 1 2023/02/14 11:37
- 知的財産権 特許を受ける権利の譲渡と確定申告 3 2023/01/20 10:59
- その他(自然科学) 理系と文系、現実と心、科学と文学を繋ぐためには「性質」の世界が存在することを認めるべきでは? 4 2022/08/24 16:43
- 哲学 理系・文系、唯物論・唯心論等を繋ぐには「性質」の存在を認めることではないでしょうか? 7 2022/08/24 14:22
- Windows 8 SSD換装の注意点? アプリケーションインストールでの弊害? 4 2023/01/06 04:18
- HTML・CSS <input>のstep属性に違反する入力をした時にエラーメッセージを表示させない事は可能か 2 2023/02/16 04:11
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- 医療・介護・福祉 入院、手術をしたことが会社にばれることはあるでしょうか 3 2023/04/07 15:57
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
[python] 文字列を変数名として...
-
構造体の各データの表示につい...
-
ACCESS テキストボックスを隙...
-
pythonで実体参照文字を直す方法
-
VBAで特殊文字を出力したい
-
VBAでPDFのコピーとリネームを...
-
構造体の変数の値を、動的に取...
-
VBA他のブックから値のみ貼付す...
-
文字列の連結について
-
C言語 家系図
-
文字列を1つの要素とした配列...
-
コンボボックスのtag情報の取得...
-
[C#] string name = new ..
-
ruby+xml 特定の属性値をもつ要...
-
REXMLについて教えてください
-
C++ コマンドプロンプトでの入...
-
2次元配列定義後の、個々の要...
-
Rubyによる大規模データ加工プ...
-
Ruby : 引数にデフォルト地を指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
[python] 文字列を変数名として...
-
VBAでPDFのコピーとリネームを...
-
実行時エラー 3020の対策
-
パイソンプログラミング
-
ACCESS テキストボックスを隙...
-
コンボボックスのtag情報の取得...
-
構造体の変数の値を、動的に取...
-
vbaでxmlからNodeListでデータ...
-
UWSC:ポップアップウインドウ...
-
FindFirst を複数条件で検索
-
構造体の各データの表示につい...
-
エクセルVBA シート名の部分一...
-
【メモリ不足で落ちる(python)】
-
バッチファイル 戻り値
-
VB6のLSETをVB2005で実現するに...
-
C++ コマンドプロンプトでの入...
-
python、継承を確認するための...
-
PHP+SQLiteでmax(id)が使えない?
-
「*:*」って何を意味するのでし...
おすすめ情報