当前位置:C++技术网 > 资讯 > XML编程:5 C++中使用XML文件:生成XML文件

XML编程:5 C++中使用XML文件:生成XML文件

更新时间:2015-06-24 10:11:55浏览次数:1+次

    使用前请阅读《C++中使用XML文件:概述》,了解使用背景。

    首先要导入dll文件,代码如下:

/* - 导入此DLL文件后,下面的COM组件才可以使用 - */
#import "msxml3.dll" // - 直接在文件中导入,不依赖IDE的导入,移植性好

/* - 创建XML文档 - */
::CoInitialize(NULL); // - 初始化使用环境,即初始化COM组件
MSXML2::IXMLDOMDocumentPtr TaskXmlDoc; // - 创建一个XML文档
HRESULT hResult = TaskXmlDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30)); // - 实例化XML文档
if(!SUCCEEDED(hResult))
{
    printf("创建XML文档失败!");
    return ;
}

/* - 创建节点 - */
MSXML2::IXMLDOMElementPtr RootNode = TaskXmlDoc->createElement(_bstr_t(_T("根节点"))); // - 创建节点
TaskXmlDoc->appendChild(RootNode); // - 将节点添加到XML文档中

/* - 创建子节点 - */
MSXML2::IXMLDOMElementPtr XmlChildNode1 = TaskXmlDoc->createElement(_bstr_t(_T("一级子节点")));
MSXML2::IXMLDOMElementPtr XmlChildNode2 = TaskXmlDoc->createElement(_bstr_t(_T("一级子节点")));

/* - 将一级子节点添加到根节点下 - */
RootNode->appendChild(XmlChildNode1);
RootNode->appendChild(XmlChildNode2);

/* - 创建二级子节点 - */
MSXML2::IXMLDOMElementPtr XmlChildChildNode1 = TaskXmlDoc->createElement(_bstr_t(_T("二级子节点")));
XmlChildChildNode1->put_text(_T("二级子节点文字"));
MSXML2::IXMLDOMElementPtr XmlChildChildNode2 = TaskXmlDoc->createElement(_bstr_t(_T("二级子节点")));
XmlChildChildNode2->put_text(_T("二级子节点文字"));

/* - 将二级子节点添加到一级子节点下 - */
XmlChildNode1->appendChild(XmlChildChildNode1);
XmlChildNode2->appendChild(XmlChildChildNode2);

/* - 保存生成XML文件 - */
hResult = TaskXmlDoc->save(_variant_t(_bstr_t(_T("c:test.xml"))));
if(!SUCCEEDED(hResult))
{
    printf("保存XML文档失败!");
    return ;
}
    
/* - 释放使用的资源,节点释放顺序没有关系,但是在释放环境前要将节点都释放了 - */
XmlChildChildNode2.Release();
XmlChildChildNode1.Release();
XmlChildNode2.Release();
XmlChildNode1.Release();
RootNode.Release();
TaskXmlDoc.Release();
::CoUninitialize(); // - 释放环境

    说明:MSXML2::IXMLDOMDocumentPtr为文档对象类型,用于声明XML文档对象,此文档对象保存就生成了XML文件;
    MSXML2::IXMLDOMElementPtr为文档中的节点对象类型,用于声明节点对象,可以用于节点的增删改查。
    其他的都是比较好理解的。下一篇文章将讲解如何打开XML文件,后续的则是解释各个函数的使用。