- PR -

MSXML/DOM/insertBeforeについて

1
投稿者投稿内容
会議室デビュー日: 2006/04/07
投稿数: 3
投稿日時: 2006-04-07 13:15
響と申します。
MSXMLでお尋ねしたい事があります。

MSXMLのDOM操作で、XMLデータを読込み、データの編集(追加、挿入、削除など)をし、最終的に別のXMLファイルを作成する処理を行っています。
編集の対象はELEMENTやTEXTなど様々ですが、現在ELEMENTで分からない部分があります。
削除や単なる追加は全て行えているのですが、エレメントの挿入処理がうまくいきません。
単純ミスかもしれませんが、経験のある方、ご教授ください。

プログラム言語はC++で開発環境はVC++6.0、パーサはMSXML4.0です。

--------------------

挿入処理は「insertBefore」で行っています。
ツリー状況は単純エレメントの存在で、

NODE_ELEMENT(ROOT)
 NODE_ELEMENT1
  NODE_ELEMENT1-1
  (ここへ挿入)
  NODE_ELEMENT1-2
  NODE_ELEMENT1-3
 NODE_ELEMENT2
  NODE_ELEMENT2-1

のような感じです。

insertBeforeの利用としては、
(IXMLDOMElementPtr/NODE_ELEMENT1)->insertBefore(instag, IXMLDOMElementPtr/NODE_ELEMENT1-2);
で行い、instagはIXMLDOMDocumentPtr->createElement(指定されたタグ名)で生成したものです。

このinsertBeforeの結果、catch(_com_error E)に飛びE.ErrorMessage()を確認すると「パラメータが間違っています」となります。

--------------------

_variant_t refChild;
refChild.vt = VT_NULL;
としたものを
(IXMLDOMElementPtr/NODE_ELEMENT1)->insertBefore(instag, refChild);
と渡すとNODE_ELEMENT1下の最終エレメントとして登録はされました。

この変形で、念のため、

IDispatchPtr ptrDispatch;
_variant_t refChild;
(IXMLDOMElementPtr/NODE_ELEMENT1-2)->QueryInterface(IID_IDispatch, (void**)(&ptrDispatch));
refChild.pdispVal = ptrDispatch.GetInterfacePtr();
refChild.vt = VT_DISPATCH;
(IXMLDOMElementPtr/NODE_ELEMENT1)->insertBefore(instag,refChild);

の、ようにしても、スローはされませんが、その後、挿入したinstagから親を取得してアクセスするとパーサー内でエラーが発生します。

--------------------

何か注意点などがあれば、お教えください。
よろしくお願いします。


[ メッセージ編集済み 編集者: 響 編集日時 2006-04-07 14:32 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-04-07 14:07
NODE_ELEMENT ≠ DOMDocument
会議室デビュー日: 2006/04/07
投稿数: 3
投稿日時: 2006-04-07 14:29
> NODE_ELEMENT ≠ DOMDocument

原文に記載間違いがありました。
(IXMLDOMDocumentPtr/NODE_ELEMENT*)の記載部分は全てIXMLDOMElementPtrです。
原文訂正しました。

MMXさま、ありがとうございます。
その上でご教授いただけることがあれば、よろしくお願いいたします。

[ メッセージ編集済み 編集者: 響 編集日時 2006-04-07 14:32 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-04-07 15:31
何かのってるが、よくわからない、COM解説者が必要?
Problem using the insertBefore() function in xml
http://www.xmlpitstop.com/NewsGroups/readpost.aspx?MessageID=%3c74D18E08-00DD-4043-ACD8-83D7DFB3D4F6%40microsoft.com%3e&NewsGroup=microsoft.public.xml&GroupID=14
会議室デビュー日: 2006/04/07
投稿数: 3
投稿日時: 2006-04-07 16:02
MMXさん、ありがとうございました。
頂いた内容で、解決しました。
1

スキルアップ/キャリアアップ(JOB@IT)