#include "stdafx.h"
#include <stdio.h>
#include <atlbase.h >
#include <windows.h>
#import <msxml4.dll>raw_interfaces_only //head file
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR m_strId[] = L"bk101";
TCHAR m_strAuthor[] = L"jay";
TCHAR m_strTitle[] = L"myxml";
TCHAR m_path[] = L"e:\\me.xml";
VARIANT var;
USES_CONVERSION;
var.vt = VT_BSTR;
var.bstrVal = A2W(LPCSTR(m_strId));
VARIANT var1;
var1.vt = VT_BSTR;
var1.bstrVal = A2W(LPCSTR(m_strAuthor));
VARIANT var2;
var2.vt = VT_BSTR;
var2.bstrVal = A2W(LPCSTR(m_strTitle));
VARIANT var3;
var3.vt = VT_BSTR;
var3.bstrVal = A2W(LPCSTR(m_path));
CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr xmlRoot;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if(!SUCCEEDED(hr))
{
printf("創建domdocument對象失敗!\n");
getchar();
return 0;
}
xmlRoot=pDoc->createElement((_bstr_t)"Book",NULL);
xmlRoot->setAttribute((_bstr_t)"id",var);
pDoc->appendChild(xmlRoot,NULL);
MSXML2::IXMLDOMElementPtr pNode;
pNode=pDoc->createElement((_bstr_t)"Author",NULL);
pNode->put_text((_bstr_t)var1);
xmlRoot->appendChild(pNode,NULL);
pNode=pDoc->createElement((_bstr_t)"Title",NULL);
pNode->put_text((_bstr_t)var2);
xmlRoot->appendChild(pNode,NULL);
pDoc->save(var3);
//pDoc._Release();
return 0;
}
程序編譯可以通過,但調試總是到
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if(!SUCCEEDED(hr))
{
printf("創建domdocument對象失敗!\n");
getchar();
return 0;
}這里時,hr的值顯示:沒有注冊類別,然后就創建domdocument對象失敗了,這是怎么回事啊
6 个解决方案
HRESULT hr = pDoc.CreateInstance(__uuidof(DOMDocument));
hr顯示沒有注冊類別的錯誤解決了
現在調試運行到xmlRoot=pDoc->createElement((_bstr_t)"Book",NULL);這里就會彈出一個對話框報錯:
Unhandled exception at 0x7c812a5b in xmltest.exe: Microsoft C++ exception: _com_error at memory location 0x0012fb00..
我查了一下createElement()方法,需要兩個參數,但第二個參數不知道是做什么的,就設置NULL,會不會是這個參數的問題呢
不可以為null
IXMLDOMElement* element;
pDoc->createElement((_bstr_t)"Book",&element);
創建節點元素時這樣寫試試:
CComVariant VarType(NODE_ELEMENT);
CString NodeName="publisher";
MSXML2::IXMLDOMNodePtr m_pNewNode=NULL;
m_pNewNode=m_plDomDocument->createNode(VarType,NodeName.AllocSysString(),NodeName.AllocSysString());
lz 最好找本com書系統的看一下。
ps:我快成了改作業的了