【C++】【RapidXml】C++使用rapidXml解析xml

使用方法

1、rapidxml是一个快速的xml库,官方网站: http://rapidxml.sourceforge.net/
2、下载解压以后,把以下三个头文件#include引入
rapidxml.hpp
rapidxml_utils.hpp
rapidxml_print.hpp

写xml

//写xml
void write()
{
	xml_document<> doc;//创建文档指针
	xml_node<>* rot = doc.allocate_node(node_pi,doc.allocate_string("xml version='1.0' encoding='UTF-8' "));//添加文档信息描述
	doc.append_node(rot);
	xml_node<>* one = doc.allocate_node(node_element,"one","information");//添加一级节点
	doc.append_node(one);
	xml_node<>* second = doc.allocate_node(node_element,"two",NULL);//添加二级节点
	one->append_node(second);
	for(int i=1; i<=5; i++)
	{
		xml_node<>* three = doc.allocate_node(node_element,"three","这是three标签的内容");//添加三级节点和三级节点的内容
		second->append_node(three);
		three->append_attribute(doc.allocate_attribute("sex","man"));//添加三级节点的属性
	}
	string text;
	rapidxml::print(back_inserter(text),doc,0);
	cout<<text<<endl;//在控制板打印出所写入的xml信息
	ofstream out("E:\\repaidXml_write.xml");//保存到的文档路径
	out<<doc;
	out.close();
}

控制板运行结果
【C++】【RapidXml】C++使用rapidXml解析xml_第1张图片
本地xml文档结果
【C++】【RapidXml】C++使用rapidXml解析xml_第2张图片

读操作

//读取xml文件信息
void read()
{
	file<> fdoc("E:\\repaidXml_write.xml");//打开的文件
	cout<<"xml源文件信息:"<<endl;
	cout<<fdoc.data()<<endl;//在控制台打印源文件的数据

	//解析xml文件

	xml_document<> doc;
	doc.parse<0>(fdoc.data());//需要解析的文件数据
	//获取一级节点
	xml_node<>* one = doc.first_node();
	cout<<"一级节点:"<<one->name()<<endl;
	//获取二级节点
	xml_node<>* two = one->first_node();
	cout<<"二级节点:"<<two->name()<<endl;
	//获取三级节点
	for(xml_node<> *three = two->first_node();//第一个三级节点
		three!=NULL;//三级节点不为空
		three = three->next_sibling())//获取下一个三级节点
	{
		cout<<"三级节点:"<<three->name();
		cout<<"              属性: ";
		cout<<three->first_attribute()->name()<<" = ";//获取第一个属性的属性名
		cout<<three->first_attribute()->value();//获取第一个属性的属性值
		cout<<endl;
	}

}

运行结果
【C++】【RapidXml】C++使用rapidXml解析xml_第3张图片

删除节点

//删除节点
void remove()
{
	file<> fdoc("E:\\repaidXml_write.xml");//打开的文件
	xml_document<>doc;
	doc.parse<0>(fdoc.data());
	
	string text;
	rapidxml::print(back_inserter(text),doc,0);//把doc中的数据插入到text中
	cout<<"文件原信息:"<<endl;
	cout<<text<<endl;

	xml_node<> * one = doc.first_node();//获取第一个一级节点
	xml_node<>* second = one->first_node();//获取第一个二级节点
	xml_node<>* three = second->first_node();//获取第一个三级节点
	second->remove_node(three);//删除第一个二级节点下的第一个三级节点

	text = "删除一个节点后的文件:\r\n";
	rapidxml::print(back_inserter(text),doc,0);//把删除节点后的doc数据插入到text中
	cout<<text<<endl;

	ofstream out("E:\\repaidXml_write.xml");//保存修改后的doc数据到文件中
	out<<doc;
}

控制台运行结果

【C++】【RapidXml】C++使用rapidXml解析xml_第4张图片
文件结果
【C++】【RapidXml】C++使用rapidXml解析xml_第5张图片

你可能感兴趣的:(c/c++,xml解析)