MS XML 文檔創建

    要使用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>




   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章