- - PR -
MSXML/DOM/insertBeforeについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2006-04-07 14:07
NODE_ELEMENT ≠ DOMDocument
|
|
投稿日時: 2006-04-07 14:29
> NODE_ELEMENT ≠ DOMDocument
原文に記載間違いがありました。 (IXMLDOMDocumentPtr/NODE_ELEMENT*)の記載部分は全てIXMLDOMElementPtrです。 原文訂正しました。 MMXさま、ありがとうございます。 その上でご教授いただけることがあれば、よろしくお願いいたします。 [ メッセージ編集済み 編集者: 響 編集日時 2006-04-07 14:32 ] |
|
投稿日時: 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 16:02
MMXさん、ありがとうございました。
頂いた内容で、解決しました。 |
1