// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <comutil.h>
#include <iostream>
#include <MsXml6.h>
#pragma comment(lib, "comsuppw.lib")
#pragma comment(lib, "msxml6.lib")
using namespace std;
void CreateXMLFile(IXMLDOMDocument *pXMLDoc);
int _tmain(int argc, _TCHAR* argv[])
{
    // 初始化COM
    HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
    if (FAILED(hr))
        return 1;
    
    // 创建XML文档对象
    IXMLDOMDocument *pXMLDoc;
    hr = CoCreateInstance(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pXMLDoc));
    if (SUCCEEDED(hr))
    {
        CreateXMLFile(pXMLDoc);
        pXMLDoc->Release();
    }
    else
        cout << "创建XMLDOMDocument对象失败" << endl;
    CoUninitialize();
    system("pause");
    return 0;
}
void CreateXMLFile(IXMLDOMDocument *pXMLDoc)
{
    /* 在文档中创建XML声明 */
    IXMLDOMProcessingInstruction *pProInstruction;
    pXMLDoc->createProcessingInstruction(L"xml", L"version=\"1.0\" encoding=\"utf-8\"", &pProInstruction);
    pXMLDoc->appendChild(pProInstruction, NULL);
    pProInstruction->Release();
    /* 在文档中创建根节点<book> */
    IXMLDOMElement *pBookElement;
    pXMLDoc->createElement(L"book", &pBookElement);
    pXMLDoc->appendChild(pBookElement, NULL); // 把根节点加入到文档中
    /* 给根节点<book>添加id属性*/
    pBookElement->setAttribute(L"id", variant_t(448));
    /* 给根节点<book>添加子节点<name>和<price> */
    IXMLDOMElement *pBookNameElement;
    IXMLDOMElement *pBookPriceElement;
    pXMLDoc->createElement(L"name", &pBookNameElement);
    pXMLDoc->createElement(L"price", &pBookPriceElement);
    pBookNameElement->put_text(L"JavaScript开发技术大全");
    pBookPriceElement->put_text(L"$65");
    pBookElement->appendChild(pBookNameElement, NULL);
    pBookElement->appendChild(pBookPriceElement, NULL);
    pBookNameElement->Release();
    pBookPriceElement->Release();
    pBookElement->Release();
    /* 保存XML文件 */
    HRESULT hr = pXMLDoc->save(variant_t("file.xml"));
    if (FAILED(hr))
        cout << "XML文件保存失败" << endl;
}
      

