vc6如何读写xml

在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;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值