在cpp中增加
#import "msxml.dll" rename_namespace("MSXML")
-----这几名一定要加否则报错,表示以COM形式调用所以要初始化一下COM----------
AfxEnableControlContainer();
::AfxOleInit();
::CoInitialize(NULL);
因为是com操作,所以一开始有个引入
#include "msxml.h"
#import "C:/windows/system32/msxml.dll" rename_namespace("xml")
以及声明com
AfxEnableControlContainer();
::AfxOleInit();
::CoInitialize(NULL);
--------------------------------------------
//初始MSXML智能指针
MSXML::IXMLDOMDocumentPtr doc=NULL;
MSXML::IXMLDOMElementPtr ele=NULL;
MSXML::IXMLDOMNodePtr Node=NULL, NodeTable=NULL, NodeField=NULL;
hr=doc.CreateInstance(_T("MSXML.domdocument"));
if(FAILED(hr)) {
//Error(_T("MSXML not installed!"));
SetState(dmstNormal);
return FALSE;
}
//load from file or buf
if(bFromFile) {
if(doc->load(filename)==VARIANT_FALSE) {
doc=NULL;
s.Format(_T("XML File %s not found"), (_bstr_t)filename);
Error(s);
SetState(dmstNormal);
return FALSE;
}
}
else doc->loadXML(xml);
//根元素
ele=doc->documentElement;
if(ele==NULL)
{
SetState(dmstNormal);
return TRUE;
}
//逐个表元素
for(NodeTable=ele->firstChild; NodeTable!=NULL; NodeTable=NodeTable->nextSibling) {
TableName=(LPCTSTR)NodeTable->nodeName;
//if(CPub::ArrayCompareNoCase(arrTable, TableName)==-1) continue;
row=InsertRow(bAsNew);
//逐个字段
for(NodeField=NodeTable->firstChild; NodeField!=NULL; NodeField=NodeField->nextSibling) {
FieldName=(LPCTSTR)NodeField->nodeName;
if(FieldName.Find(_T("."))==-1 && TableName.IsEmpty()==FALSE)
FieldName=/*TableName +_T(".")+*/ FieldName;
col=GetFieldIndex(FieldName);
if(col==-1) continue;
//Data
//datatype=GetColDataType(col);
Data=(LPCTSTR)NodeField->text;
/*if(datatype==DATATYPE_DATETIME) {
Data.Replace(_T('T'), _T(' '));
if(Data.GetLength()>19) Data=Data.Left(19);
}
CDataTableStatic::SetData(row, col, Data);*/
if(GetFieldType(col) == ftDateTime)
{
tempDT.ParseDateTime(Data);
if ((tempDT.GetStatus() == COleDateTime::invalid)&&Data.GetLength() > 0)
{
tempDT = CPub::CString2COleDateTime(Data);
//tempDT = dt1;
Data = tempDT.Format();
}
}
this->SetAsString(col,row,Data);
}
}
doc=NULL;
ele=NULL;
Node=NULL;
NodeTable=NULL;
NodeField=NULL;
SetState(dmstNormal);
return TRUE;
#import "msxml.dll" rename_namespace("MSXML")
-----这几名一定要加否则报错,表示以COM形式调用所以要初始化一下COM----------
AfxEnableControlContainer();
::AfxOleInit();
::CoInitialize(NULL);
因为是com操作,所以一开始有个引入
#include "msxml.h"
#import "C:/windows/system32/msxml.dll" rename_namespace("xml")
以及声明com
AfxEnableControlContainer();
::AfxOleInit();
::CoInitialize(NULL);
--------------------------------------------
//初始MSXML智能指针
MSXML::IXMLDOMDocumentPtr doc=NULL;
MSXML::IXMLDOMElementPtr ele=NULL;
MSXML::IXMLDOMNodePtr Node=NULL, NodeTable=NULL, NodeField=NULL;
hr=doc.CreateInstance(_T("MSXML.domdocument"));
if(FAILED(hr)) {
//Error(_T("MSXML not installed!"));
SetState(dmstNormal);
return FALSE;
}
//load from file or buf
if(bFromFile) {
if(doc->load(filename)==VARIANT_FALSE) {
doc=NULL;
s.Format(_T("XML File %s not found"), (_bstr_t)filename);
Error(s);
SetState(dmstNormal);
return FALSE;
}
}
else doc->loadXML(xml);
//根元素
ele=doc->documentElement;
if(ele==NULL)
{
SetState(dmstNormal);
return TRUE;
}
//逐个表元素
for(NodeTable=ele->firstChild; NodeTable!=NULL; NodeTable=NodeTable->nextSibling) {
TableName=(LPCTSTR)NodeTable->nodeName;
//if(CPub::ArrayCompareNoCase(arrTable, TableName)==-1) continue;
row=InsertRow(bAsNew);
//逐个字段
for(NodeField=NodeTable->firstChild; NodeField!=NULL; NodeField=NodeField->nextSibling) {
FieldName=(LPCTSTR)NodeField->nodeName;
if(FieldName.Find(_T("."))==-1 && TableName.IsEmpty()==FALSE)
FieldName=/*TableName +_T(".")+*/ FieldName;
col=GetFieldIndex(FieldName);
if(col==-1) continue;
//Data
//datatype=GetColDataType(col);
Data=(LPCTSTR)NodeField->text;
/*if(datatype==DATATYPE_DATETIME) {
Data.Replace(_T('T'), _T(' '));
if(Data.GetLength()>19) Data=Data.Left(19);
}
CDataTableStatic::SetData(row, col, Data);*/
if(GetFieldType(col) == ftDateTime)
{
tempDT.ParseDateTime(Data);
if ((tempDT.GetStatus() == COleDateTime::invalid)&&Data.GetLength() > 0)
{
tempDT = CPub::CString2COleDateTime(Data);
//tempDT = dt1;
Data = tempDT.Format();
}
}
this->SetAsString(col,row,Data);
}
}
doc=NULL;
ele=NULL;
Node=NULL;
NodeTable=NULL;
NodeField=NULL;
SetState(dmstNormal);
return TRUE;