VC++ XML读写随笔【二】tinyxml创建写入xml文件教程

我们使用tinyxml库,生成和解析XML文档。

他是一个小巧的xml库,可以生成和解析xml文档,免费开源,可以直接将源码加载到项目中,适合多种平台。

我们使用tinyxml v1版本。

下载地址:https://sourceforge.net/projects/tinyxml/


把他解压后放到项目的文件夹下



这就是他的所有文件了




在你的项目内新建一个文件筛选器,名为tinyxml,之后把这些文件都添加进去。



这样就配置好了,我们怎么使用呢?

我们首先建立一个这样的代码,一切操作都在test1内进行。

记得声明tinyml.h的头文件

#include "tinyxml/tinyxml.h" //声明头文件
#include <string>
#include <Windows.h>
int test1()
{
	return 0;
}

int main()
{
	test1();
	system("pause");
	return 0;
}


构造一个xml类,让他有声明和root根元素

int test1()
{
	TiXmlDocument xml_doc;  //构造xml文件类
	xml_doc.LinkEndChild(new TiXmlDeclaration("1.0", "GBK", "")); //添加XML声明

	TiXmlElement* xml_root = new TiXmlElement("root");    //构造根元素
	xml_doc.LinkEndChild(xml_root);    //把根元素添加进xml_doc里

	//对于以上代码做一个小说明:LinkEndChild可以链接声明,也可以链接元素。

        xml_doc.SaveFile("xml_doc.xml"); //这样就可以输出啦
        return 0;
}


首先使用TiXmlDocument构造xml文件类,即代码中 xml_doc。

然后使用使用xml_doc的LinkEndChild类函数,链接new出来的TiXmlDeclaration声明类,给他声明部分。

然后使用TiXmlElement构造元素类,即代码中xml_root,他是根元素。

也是用LinkEndChild,链接到xml_doc即可。

<?xml version="1.0" encoding="GBK" ?>
<root />

虽然看起来不太对,"root"没有成对出现,这是因为我们还没有添加元素。

int test1()
{
	TiXmlDocument xml_doc;  //构造xml文件类
	xml_doc.LinkEndChild(new TiXmlDeclaration("1.0", "GBK", "")); //添加XML声明

	TiXmlElement* xml_root = new TiXmlElement("root");    //构造根元素
	xml_doc.LinkEndChild(xml_root);    //把根元素添加进xml_doc里
	//对于以上代码做一个小说明:LinkEndChild可以链接声明,也可以链接元素。
//----------------新----加----入----的----代----码--------------------------------
	TiXmlElement* xml_child = new TiXmlElement("host");//创建名为host一个元素
	xml_root->LinkEndChild(xml_child);//把这个元素添加进root根元素
	xml_child->LinkEndChild(new TiXmlText("www.baidu.com"));//给这个元素添加数据
	
	//下边两行代码,是给这个元素添加属性
	xml_child->SetAttribute("checked", "true");
	xml_child->SetAttribute("station", 1001);
        //对于以上代码做一个小说明:元素类为TiXmlElement元素数据类为TiXmlText设置元素属性函数为SetAttribute。使用方法请仔细阅读代码
	
	xml_doc.SaveFile("xml_doc.xml");保存文件
	return 0;
}

和创建root元素一样的类创建xml_child元素。

使用xml_doc的类函数LinkEndChild把新建的xml_child链接进来。

向xml_child添加数据。

SetAttribute即可向xml_child添加属性。

<?xml version="1.0" encoding="GBK" ?>
<root>
    <host checked="true" station="1001">www.baidu.com</host>
</root>

效果看起来不错。


演示一下元素嵌套

int test1()
{
	TiXmlDocument xml_doc;  //构造xml文件类
	xml_doc.LinkEndChild(new TiXmlDeclaration("1.0", "GBK", "")); //添加XML声明

	TiXmlElement* xml_root = new TiXmlElement("root");    //构造根元素
	xml_doc.LinkEndChild(xml_root);    //把根元素添加进xml_doc里
	//对于以上代码做一个小说明:LinkEndChild可以链接声明,也可以链接元素。

	TiXmlElement* xml_child = new TiXmlElement("host");//创建名为host一个元素
	xml_root->LinkEndChild(xml_child);//把这个元素添加进root根元素
	xml_child->LinkEndChild(new TiXmlText("www.baidu.com"));//给这个元素添加数据
	
	//下边两行代码,是给这个元素添加属性
	xml_child->SetAttribute("checked", "true");
	xml_child->SetAttribute("station", 1001);

	TiXmlElement* xml_client = new TiXmlElement("client");	//嵌套元素
	xml_root->LinkEndChild(xml_client);

	TiXmlElement* xml_name = new TiXmlElement("name");	//仔细阅读一下,不过是把new的元素,连接到xml_client而已
	xml_name->LinkEndChild(new TiXmlText("余生皆假期"));
	xml_client->LinkEndChild(xml_name);

	//同上
	TiXmlElement* xml_id = new TiXmlElement("id");
	xml_id->LinkEndChild(new TiXmlText("10000"));
	xml_client->LinkEndChild(xml_id);

	xml_doc.SaveFile("xml_doc.xml");	//保存文件

	//或者转成string
	std::string text;
	text << xml_doc;
	printf("%s\n", text.c_str());
	
	return 0;
	
}

请自行分析源码,效果如下

<?xml version="1.0" encoding="GBK" ?>
<root>
    <host checked="true" station="1001">www.baidu.com</host>
    <client>
        <name>余生皆假期</name>
        <id>10000</id>
    </client>
</root>


值得注意的是,在结尾也可以转化为string,直接用<<操作符即可。我还用printf把他打印一下。






猜你喜欢

转载自blog.csdn.net/nullccc/article/details/81064295
今日推荐