以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之三 导出数据库数据为xml格式自定义

来源:互联网 发布:刘轩豪网络 诈骗 编辑:程序博客网 时间:2024/05/17 22:22
void CXMLwithSQLDlg::OnBnClickedCoutput()
{
    long ColCounti;
    FieldsPtr fields;
    BSTR bstrColName[100];
    CString m_nd[100];
    m_list.DeleteAllItems();
    CFileException e;
    CString strFileName;
    _RecordsetPtr pRs;
    pRs = m_ado.GetRecordset();
    try
    {
        //pRs = m_ado.GetRecordset();

        MSXML2::IXMLDOMDocumentPtr pDoc;
        MSXML2::IXMLDOMElementPtr xmlRoot;
        //定义文档头对象
        MSXML2::IXMLDOMProcessingInstructionPtr head;
        HRESULT hr = pDoc.CreateInstance(_uuidof(MSXML2::DOMDocument30));
        if(!SUCCEEDED(hr))
        {
            MessageBox("Error");
            return;
        }
        //创建文档头
        head = pDoc->createProcessingInstruction(_bstr_t(_T("xml")), \
            _bstr_t(_T("version='1.0' encoding='UTF-8'")));
        pDoc->appendChild(head);
        //创建根节点
        pDoc->raw_createElement((_bstr_t)(char*) "Log", &xmlRoot);
        xmlRoot->Puttext("\n");
        /* 创建属性和属性值*/
        xmlRoot->setAttribute("Pri", "16");
        xmlRoot->setAttribute("tablename", (char*)(_bstr_t) tname);
        xmlRoot->setAttribute("Remark", "审计日志");
        //把xmlRoot节点放到pDoc下
        pDoc->raw_appendChild(xmlRoot, NULL);
        MSXML2::IXMLDOMElementPtr childNode;
        HRESULT h = pRs->get_Fields(&fields);
        if(SUCCEEDED(h))
        {
            fields->get_Count(&ColCounti);
        }
        while(!pRs->adoEOF)
        {
            for(long i = 0;i < ColCounti;i++)
            {
                fields->Item[i]->get_Name(&bstrColName[i]);

                if(pRs->GetCollect(bstrColName[i]).vt != VT_NULL)
                {
                    m_nd[i] = (char*)(_bstr_t) pRs->GetCollect(bstrColName[i]);
                }
                else
                {
                    m_nd[i] = "";
                }
            }
            MSXML2::IXMLDOMElementPtr childNode1;
            //创建节点
            pDoc->raw_createElement((_bstr_t)(char*)"LogID", &childNode1);
            //给创建的节点赋值
            childNode1->Puttext((char*)(_bstr_t) m_nd[0]);
            //创建节点属性和属性值
            childNode1->setAttribute("Remark", "记录ID");
            //把创建的新节点放根节点xmlRoot下
            xmlRoot->appendChild(childNode1);
            /*子节点中创建子节点 */
            MSXML2::IXMLDOMElementPtr childNode2;
            pDoc->raw_createElement((_bstr_t)(char*) "Subject", &childNode2);
            childNode2->setAttribute("Remark", "事件主题");
            MSXML2::IXMLDOMElementPtr childNode3;
            pDoc->raw_createElement((_bstr_t)(char*) "Node", &childNode3);
            childNode3->Puttext((char*)(_bstr_t) m_nd[1]);
            childNode3->setAttribute("Remark", "主题IP地址");
            childNode2->appendChild(childNode3);
            MSXML2::IXMLDOMElementPtr childNode4;
            pDoc->raw_createElement((_bstr_t)(char*) "NodeID", &childNode4);
            childNode4->Puttext((char*)(_bstr_t) m_nd[2]);
            childNode4->setAttribute("Remark", "主题ID");
            childNode2->appendChild(childNode4);
            MSXML2::IXMLDOMElementPtr childNode5;
            pDoc->raw_createElement((_bstr_t)(char*) "ComputerName", &childNode5);
            childNode5->Puttext((char*)(_bstr_t) m_nd[3]);
            childNode5->setAttribute("Remark", "计算机名称");
            childNode2->appendChild(childNode5);
            MSXML2::IXMLDOMElementPtr childNode6;
            pDoc->raw_createElement((_bstr_t)(char*) "UsreName", &childNode6);
            childNode6->Puttext((char*)(_bstr_t) m_nd[4]);
            childNode6->setAttribute("Remark", "用户名或责任人");
            childNode2->appendChild(childNode6);
            MSXML2::IXMLDOMElementPtr childNode7;
            pDoc->raw_createElement((_bstr_t)(char*) "Deparment", &childNode7);
            childNode7->Puttext((char*)(_bstr_t) m_nd[5]);
            childNode7->setAttribute("Remark", "部门");
            childNode2->appendChild(childNode7);
            MSXML2::IXMLDOMElementPtr childNode8;
            pDoc->raw_createElement((_bstr_t)(char*) "Program", &childNode8);
            childNode8->Puttext((char*)(_bstr_t) m_nd[6]);
            childNode8->setAttribute("Remark", "部件");
            childNode2->appendChild(childNode8);
            MSXML2::IXMLDOMElementPtr childNode9;
            pDoc->raw_createElement((_bstr_t)(char*) "Facility", &childNode9);
            childNode9->Puttext((char*)(_bstr_t) m_nd[7]);
            childNode9->setAttribute("Remark", "类型");
            childNode2->appendChild(childNode9);
            xmlRoot->appendChild(childNode2);
            ////////////////////////
            MSXML2::IXMLDOMElementPtr childNode10;
            pDoc->raw_createElement((_bstr_t)(char*) "Object", &childNode10);
            childNode10->setAttribute("Remark", "事件客体");
            MSXML2::IXMLDOMElementPtr childNode11;
            pDoc->raw_createElement((_bstr_t)(char*) "ObjectName", &childNode11);
            childNode11->Puttext((char*)(_bstr_t) m_nd[8]);
            childNode11->setAttribute("Remark", "文件名");
            childNode10->appendChild(childNode11);
            xmlRoot->appendChild(childNode10);
            //////////////////////////////
            MSXML2::IXMLDOMElementPtr childNode12;
            pDoc->raw_createElement((_bstr_t)(char*) "Details", &childNode12);
            childNode12->Puttext((char*)(_bstr_t) m_nd[9]);
            childNode12->setAttribute("Remark", "事件内容");
            xmlRoot->appendChild(childNode12);
            MSXML2::IXMLDOMElementPtr childNode13;
            pDoc->raw_createElement((_bstr_t)(char*) "Result", &childNode13);
            childNode13->Puttext((char*)(_bstr_t) m_nd[10]);
            childNode13->setAttribute("Remark", "事件结果");
            xmlRoot->appendChild(childNode13);
            MSXML2::IXMLDOMElementPtr childNode14;
            pDoc->raw_createElement((_bstr_t)(char*) "EntryStamp", &childNode14);
            childNode14->Puttext((char*)(_bstr_t) m_nd[11]);
            childNode14->setAttribute("Remark", "发生时间");
            xmlRoot->appendChild(childNode14);
            MSXML2::IXMLDOMElementPtr childNode15;
            pDoc->raw_createElement((_bstr_t)(char*) "Level", &childNode15);
            childNode15->Puttext((char*)(_bstr_t) m_nd[12]);
            childNode15->setAttribute("Remark", "事件风险级别");
            xmlRoot->appendChild(childNode15);
            MSXML2::IXMLDOMElementPtr childNode16;
            pDoc->raw_createElement((_bstr_t)(char*) "Type", &childNode16);
            childNode16->Puttext((char*)(_bstr_t) m_nd[13]);
            childNode16->setAttribute("Remark", "事件种类");
            xmlRoot->appendChild(childNode16);
            MSXML2::IXMLDOMElementPtr childNode17;
            pDoc->raw_createElement((_bstr_t)(char*) "ProductType", &childNode17);
            childNode17->Puttext((char*)(_bstr_t) m_nd[14]);
            childNode17->setAttribute("Remark", "产品类别");
            xmlRoot->appendChild(childNode17);
            MSXML2::IXMLDOMElementPtr childNode18;
            pDoc->raw_createElement((_bstr_t)(char*) "BehaviourType", &childNode18);
            childNode18->Puttext((char*)(_bstr_t) m_nd[15]);
            childNode18->setAttribute("Remark", "行为类别");
            xmlRoot->appendChild(childNode18);
            MSXML2::IXMLDOMElementPtr childNode19;
            pDoc->raw_createElement((_bstr_t)(char*) "Reservation", &childNode19);
            childNode19->Puttext((char*)(_bstr_t) m_nd[16]);
            childNode19->setAttribute("Remark", "保留项");
            xmlRoot->appendChild(childNode19);
            pRs->MoveNext();
        }
        //导出xml格式路径选择字符串
        CFileDialog FileLog(FALSE,"xml",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"xml (*.xml)|*.xml|所有文件(*.*)|*.*||",NULL);

        if(FileLog.DoModal() == IDOK)
        {
            strFileName = FileLog.GetFileName();
        }
        //导出保存
        pDoc->save((char*)(_bstr_t)strFileName);
        AfxMessageBox("导出成功");
        xmlRoot.Release();
        pDoc.Release();
    }
    catch (_com_error e)
    {
        e.Description();
    }
}
原创粉丝点击