MS XML 文档创建

来源:互联网 发布:sql2000导入数据库 编辑:程序博客网 时间:2024/05/16 09:45
    要使用MS XML 首先要进行注册msxml(n).dll, 因为MS 已经封装成COM了。现在那MsXML4.dll 为例。
1.首先加载COM:
  ::CoInitialize(NULL);
2.然后进行IXMLDOMDocument指针的获取,其实就是获得XML DOM 对象:
    IUnknown *pUnKnown = NULL;
    MSXML2::IXMLDOMDocument *pDomDoc = NULL;
    HRESULT hr = CoCreateInstance(__uuidof(MSXML2::DOMDocument30),
        NULL, CLSCTX_INPROC_SERVER,
        __uuidof(IUnknown), (void ** )&pUnKnown);
    if (FAILED (hr))
    {
        ::MessageBeep(0xFFFFFFFF);
    }

    hr = pUnKnown->QueryInterface(__uuidof(MSXML2::IXMLDOMDocument), (void**) &pDomDoc);
    if (FAILED (hr))
    {
   
        ::MessageBeep(0xFFFFFFFF);
    }

    pUnKnown->Release();

3.  然后进行节点对象的创建

    _bstr_t strFileE = "RootNode";
    _bstr_t strSend = "SendNode";
    _bstr_t strThid = "Third";
    _bstr_t Value = "Value";
    _variant_t valueS = "1";
    _variant_t valueT = "2";

    IXMLDOMElementPtr  pFristNode = pDomDoc->createElement(strFileE);
    pDomDoc->appendChild(pFristNode);

    IXMLDOMElementPtr pSend = pDomDoc->createElement(strSend);
    pSend->setAttribute(Value, valueS);


    IXMLDOMElementPtr pThird = pDomDoc->createElement(strThid);
    pThird->setAttribute(Value, valueT);

    pFristNode->appendChild(pSend);
    pFristNode->appendChild(pThird);
4.  文档保存:
    pDomDoc->save(vt);

5.文档修饰:
   因为现在直接存贮,XML是将其存为一行,要让其美观,我们还要加进去/n/t;这样修改如下:
  IXMLDOMElementPtr  pFristNode = pDomDoc->createElement(strFileE);
    pDomDoc->appendChild(pFristNode);
    pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));
    IXMLDOMElementPtr pSend = pDomDoc->createElement(strSend);
    IXMLDOMElementPtr pThird = pDomDoc->createElement(strThid);
    pSend->setAttribute(Value, valueS);


    pThird->setAttribute(Value, valueT);
   

    pFristNode->appendChild(pSend);

    pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));

    pFristNode->appendChild(pThird);
    pFristNode->appendChild(pDomDoc->createTextNode(ValueLine1));


最后整个源程序:
// testxml.cpp : Defines the entry point for the console application.//#include "stdafx.h"#import "msxml4.dll"using namespace MSXML2;int main(int argc, char* argv[]){::CoInitialize(NULL);   // IXMLDOMDocumentPtr IUnknown *pUnKnown = NULL;MSXML2::IXMLDOMDocument *pDomDoc = NULL;HRESULT hr = CoCreateInstance(__uuidof(MSXML2::DOMDocument30), NULL, CLSCTX_INPROC_SERVER, __uuidof(IUnknown), (void ** )&pUnKnown);if (FAILED (hr)){::MessageBeep(0xFFFFFFFF);}hr = pUnKnown->QueryInterface(__uuidof(MSXML2::IXMLDOMDocument), (void**) &pDomDoc);if (FAILED (hr)){::MessageBeep(0xFFFFFFFF);}pUnKnown->Release();pDomDoc->async = VARIANT_FALSE;_variant_t vt = "D://test.xml";VARIANT_BOOL bRet = pDomDoc->load(vt);if (FALSE == bRet){//TRACE0("Open error");}  _bstr_t strFileE = "RootNode";_bstr_t strSend = "SendNode";_bstr_t strThid = "Third";_bstr_t Value = "Value";_variant_t valueS = "1";_variant_t valueT = "2";_bstr_t ValueLine = "/n/t";_bstr_t ValueLine1 = "/n";    IXMLDOMElementPtr  pFristNode = pDomDoc->createElement(strFileE);pDomDoc->appendChild(pFristNode);pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));IXMLDOMElementPtr pSend = pDomDoc->createElement(strSend);IXMLDOMElementPtr pThird = pDomDoc->createElement(strThid);pSend->setAttribute(Value, valueS);pThird->setAttribute(Value, valueT);pFristNode->appendChild(pSend);pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));pFristNode->appendChild(pThird);pFristNode->appendChild(pDomDoc->createTextNode(ValueLine1));pDomDoc->save(vt);pFristNode->Release();pSend->Release();pThird->Release();pFristNode = NULL;pSend = NULL;pThird = NULL;pDomDoc->Release();::CoUninitialize();return 0;}


其中pDomDoc 没有使用xml中只能指针IXMLDOMDocumentPtr,这里主要是讨论使用,其实在自己封装类的时候,
最后使用智能指针,因为简单而且不易出错。
xml文档的样子:

<RootNode>
    <SendNode Value="1"/>
    <Third Value="2"/>
</RootNode>




   

原创粉丝点击