打开 xml 文件 ::CoInitialize(NULL); HRESULT hr = m_plDomDocument.CreateInstance(CLSID_DOMDocument); if (FAILED(hr)) { _com_error er(hr); AfxMessageBox(er.ErrorMessage()); //EndDialog(1); } CString strFileName (xmlFile); _bstr_t bstrFileName; bstrFileName = strFileName.AllocSysString(); // call the IXMLDOMDocumentPtr's load function to load the XML document variant_t vResult; vResult = m_plDomDocument->load(bstrFileName); if (((bool)vResult) == TRUE) // success! { // now that the document is loaded, we need to initialize the root pointer m_pDocRoot = m_plDomDocument->documentElement; } else { AfxMessageBox("Document FAILED to load!"); }
<sqlPrefix> SELECT sum(amount) as cellNum FROM t_inInvoice WHERE 1=1 </sqlPrefix>//得到 sqlPrefix 的值 m_pDocRoot->raw_selectNodes(_bstr_t("sqlPrefix"),&resultList); resultList->get_item(0,&pIDOMNode); if( pIDOMNode ){ pIDOMNode->get_text(&bstrItemText); this->sqlPrefix = CString(bstrItemText); } pIDOMNode->Release(); pIDOMNode = NULL;
<mainlist_field> <field> <source>select typeName as _listName from t_inInvoice group by typeName</source> <rule></rule> <name>t_inInvoice.typeName</name> <type>string</type> <description>类型</description> </field> <field> <source>select goodsName as _listName from t_inInvoice group by goodsName</source> <rule></rule> <name>t_inInvoice.goodsName</name> <type>string</type> <description>货物名称</description> </field> </mainlist_field> //得到 field 的值 m_pDocRoot->raw_selectNodes(_bstr_t("\/\/field"),&resultList); for(int i=0; i<resultList->Getlength();i++){ resultList->get_item(i,&pIDOMNode); if( pIDOMNode ){
在 头文件中定义: IXMLDOMElementPtr m_pDocRoot; IXMLDOMDocumentPtr m_plDomDocument;在 cpp 中: ::CoInitialize(NULL); HRESULT hr = m_plDomDocument.CreateInstance(CLSID_DOMDocument); if (FAILED(hr)) { _com_error er(hr); AfxMessageBox(er.ErrorMessage()); } //AfxMessageBox("=="+xmlFile); CString strFileName (xmlFile); //你想要调用的xml文件名 _bstr_t bstrFileName; bstrFileName = strFileName.AllocSysString(); // call the IXMLDOMDocumentPtr's load function to load the XML document variant_t vResult; vResult = m_plDomDocument->load(bstrFileName); if (((bool)vResult) == TRUE) // success! { // now that the document is loaded, we need to initialize the root pointer m_pDocRoot = m_plDomDocument->documentElement; } else { AfxMessageBox("Document FAILED to load!"); }
::CoInitialize(NULL);
HRESULT hr = m_plDomDocument.CreateInstance(CLSID_DOMDocument);
if (FAILED(hr))
{
_com_error er(hr);
AfxMessageBox(er.ErrorMessage());
//EndDialog(1);
} CString strFileName (xmlFile);
_bstr_t bstrFileName;
bstrFileName = strFileName.AllocSysString(); // call the IXMLDOMDocumentPtr's load function to load the XML document
variant_t vResult;
vResult = m_plDomDocument->load(bstrFileName);
if (((bool)vResult) == TRUE) // success!
{
// now that the document is loaded, we need to initialize the root pointer
m_pDocRoot = m_plDomDocument->documentElement;
}
else
{
AfxMessageBox("Document FAILED to load!");
}
m_pDocRoot->raw_selectNodes(_bstr_t("sqlPrefix"),&resultList);
resultList->get_item(0,&pIDOMNode);
if( pIDOMNode ){
pIDOMNode->get_text(&bstrItemText);
this->sqlPrefix = CString(bstrItemText);
}
pIDOMNode->Release();
pIDOMNode = NULL;
<field>
<source>select typeName as _listName from t_inInvoice group by typeName</source>
<rule></rule>
<name>t_inInvoice.typeName</name>
<type>string</type>
<description>类型</description>
</field>
<field>
<source>select goodsName as _listName from t_inInvoice group by goodsName</source>
<rule></rule>
<name>t_inInvoice.goodsName</name>
<type>string</type>
<description>货物名称</description>
</field>
</mainlist_field>
//得到 field 的值
m_pDocRoot->raw_selectNodes(_bstr_t("\/\/field"),&resultList);
for(int i=0; i<resultList->Getlength();i++){
resultList->get_item(i,&pIDOMNode);
if( pIDOMNode ){
//得到name
pIDOMNode->raw_selectNodes(_bstr_t("name"),&subList);
subList->get_item(0,&subNode);
subNode->get_text(&bstrItemText);
name = CString(bstrItemText);
subNode->Release();
subNode = NULL;
//得到type
pIDOMNode->raw_selectNodes(_bstr_t("type"),&subList);
subList->get_item(0,&subNode);
subNode->get_text(&bstrItemText);
type = CString(bstrItemText);
subNode->Release();
subNode = NULL;
//得到desctiption
pIDOMNode->raw_selectNodes(_bstr_t("description"),&subList);
subList->get_item(0,&subNode);
subNode->get_text(&bstrItemText);
description = CString(bstrItemText);
subNode->Release();
subNode = NULL; //得到source
pIDOMNode->raw_selectNodes(_bstr_t("source"),&subList);
subList->get_item(0,&subNode);
subNode->get_text(&bstrItemText);
source = CString(bstrItemText);
subNode->Release();
subNode = NULL; //得到rule
pIDOMNode->raw_selectNodes(_bstr_t("rule"),&subList);
subList->get_item(0,&subNode);
subNode->get_text(&bstrItemText);
rule = CString(bstrItemText);
subNode->Release();
subNode = NULL;
field.Add(new DbField(description,type,name,source,rule)); }
}
void CtestxmlDlg::OnBnClickedButton1()
{ CString xmlFile;
xmlFile="c:\\hcy.xml";
::CoInitialize (NULL );
try {
// 通过智能指针创建一个解析器的实例
CComPtr m_plDomDocument;
HRESULT hr =m_plDomDocument.CoCreateInstance(-uuidof(DOMDocument));//括号里有问题,请帮我看看,告诉我正确答案!
if ( FAILED(hr) ) throw "不能创建XML Parser对象";
if ( spXMLDOM.p == NULL ) throw "不能创建XML Parser对象";
hr = m_plDomDocument.CoCreateInstance(CLSID_DOMDocument);
if (FAILED(hr))
{。
在 StdAfx.h 中加#import <msxml.dll> named_guids
using namespace MSXML;2。在你的主程序中 的 InitInstance() 中加
::AfxOleInit();就行了
m_plDomDocument 在哪里声明?怎么声明?我要疯了!救救我。
HRESULT hr =m_plDomDocument.CoCreateInstance(-uuidof(DOMDocument));//这语句不好时,没有_uuidof这种标识符
还有我用的是.net下的vc7.0
CoCreateInstance()括号里的参数是三个。
HRESULT CoCreateInstance(
LPCOLESTR szProgID,
LPUNKNOWN pUnkOuter = NULL,
DWORD dwClsContext = CLSCTX_ALL
) throw( );
HRESULT CoCreateInstance(
REFCLSID rclsid,
LPUNKNOWN pUnkOuter = NULL,
DWORD dwClsContext = CLSCTX_ALL
) throw( );//摘自msdnCComPtr m_plDomDocument;
HRESULT hr =m_plDomDocument.CoCreateInstance(-uuidof(DOMDocument));//括号里有问题,请帮我看看,告诉我正确答案!
我是用的 vc 6.0你可以查查其他资料!
我现在工作是维护以前的程序(使用VC6.0编的)那样我就在VC下编写也可以!
m_plDomDocument 在哪里声明?怎么声明?救救我。
HRESULT hr =m_plDomDocument.CoCreateInstance(-uuidof(DOMDocument));//这语句不好时,没有_uuidof这种标识符是这样吗?参数好像不对。
我想可能是我缺某些东东,我现在一步来,
1,#import <msxml.dll> named_guids
using namespace MSXML;2,::AfxOleInit();
没出问题!接下来我先声明一个实例,
void CxmlfescoDlg::OnBnClickedButton1()
{
::CoInitialize(NULL);
CComPtr<IXMLDocument > a;
HRESULT hr =a.CoCreateInstance(CLSID_DOMDocument);
// TODO: 在此添加控件通知处理程序代码
编译就出错:e:\hahaxml\xmlfesco\xmlfescoDlg.cpp(146): error C2872: “CLSID_DOMDocument” : 不明确的符号
e:\hahaxml\xmlfesco\xmlfescoDlg.cpp(143): error C2872: “IXMLDocument” : 不明确的符号
我直接声明
CComPtr a;
更有问题。
IXMLDOMElementPtr m_pDocRoot;
IXMLDOMDocumentPtr m_plDomDocument;在 cpp 中:
::CoInitialize(NULL);
HRESULT hr = m_plDomDocument.CreateInstance(CLSID_DOMDocument);
if (FAILED(hr))
{
_com_error er(hr);
AfxMessageBox(er.ErrorMessage());
}
//AfxMessageBox("=="+xmlFile);
CString strFileName (xmlFile); //你想要调用的xml文件名
_bstr_t bstrFileName;
bstrFileName = strFileName.AllocSysString();
// call the IXMLDOMDocumentPtr's load function to load the XML document
variant_t vResult;
vResult = m_plDomDocument->load(bstrFileName);
if (((bool)vResult) == TRUE) // success!
{
// now that the document is loaded, we need to initialize the root pointer
m_pDocRoot = m_plDomDocument->documentElement;
}
else
{
AfxMessageBox("Document FAILED to load!");
}
等我整理好了,到 www.51robot.com 中下载
一步步做下去。
结果 后就出错
e:\xmltest103\XMLDOMFromVC\XMLDOMFromVCDlg.h(23): error C2872: “IXMLDOMDocumentPtr” : 不明确的符号
e:\xmltest103\XMLDOMFromVC\XMLDOMFromVCDlg.h(24): error C2872: “IXMLDOMElementPtr” : 不明确的
e:\xmltest103\XMLDOMFromVC\XMLDOMFromVCDlg.cpp(103): error C2872: “CLSID_DOMDocument” : 不明确的符号这些都是msxml名称空间里的。
另外:我是两个操作系统。98和2000,是不是import msxml.dll 时把98中c:\\windows\system的文件给导进来了,而2000的msxml.dll 在:c:winnt\\system32是这个原因吗?
该怎么改写呢?
我没招了!
的例子,可以通过吗?(如不能通过,就是你系统的问题了)另外, 如果用 CoCreateInstance 来创建 DOM 对象的话1。 在主程序的头文件中 加
#import "msxml4.dll" named_guids
(如果是 msxml4.0 以下的版本用 ) #import "msxml.dll" named_guids 2。MSXML2::IXMLDOMDocument* document = NULL;
MSXML2::IXMLDOMParseError* parseError = NULL;
MSXML2::IXMLDOMElement* element = NULL;
CString strPathName = "51robot.xml"; HRESULT hr;
hr = CoInitialize(NULL);
if (FAILED(hr)) {
return;
} hr = CoCreateInstance(MSXML2::CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
MSXML2::IID_IXMLDOMDocument, (LPVOID*)&document);
if (!document) {
return;
}
QQ 联系 5691656
注名: CSDN XML