转自:http://blog.sina.com.cn/s/blog_a459dcf501019393.html
rapidxml是一个快速的xml库,比tinyxml快了50-100倍。本文给出创建、读取、写入xml的源码。
#include "stdafx.h" #include "stdlib.h" #include <iostream> //下面三个文件是本段代码需要的库文件 #include "rapidxml/rapidxml.hpp" #include "rapidxml/rapidxml_utils.hpp" #include "rapidxml/rapidxml_print.hpp" int CreateXml(); int ReadAndChangeXml(); int _tmain(int argc, _TCHAR* argv[]) { //测试用例 CreateXml(); //测试用例 ReadAndChangeXml(); system("pause"); return 0; } //创建一个名称为config2.xml文件 int CreateXml() { rapidxml::xml_document<> doc; rapidxml::xml_node<>* rot = doc.allocate_node(rapidxml::node_pi,doc.allocate_string("xml version='1.0' encoding='utf-8'")); doc.append_node(rot); rapidxml::xml_node<>* node = doc.allocate_node(rapidxml::node_element,"config","information"); doc.append_node(node); rapidxml::xml_node<>* color = doc.allocate_node(rapidxml::node_element,"color",NULL); node->append_node(color); color->append_node(doc.allocate_node(rapidxml::node_element,"red","0.1")); color->append_node(doc.allocate_node(rapidxml::node_element,"green","0.1")); color->append_node(doc.allocate_node(rapidxml::node_element,"blue","0.1")); color->append_node(doc.allocate_node(rapidxml::node_element,"alpha","1.0")); rapidxml::xml_node<>* size = doc.allocate_node(rapidxml::node_element,"size",NULL); size->append_node(doc.allocate_node(rapidxml::node_element,"x","640")); size->append_node(doc.allocate_node(rapidxml::node_element,"y","480")); node->append_node(size); rapidxml::xml_node<>* mode = doc.allocate_node(rapidxml::node_element,"mode","screen mode"); mode->append_attribute(doc.allocate_attribute("fullscreen","false")); node->append_node(mode); std::string text; rapidxml::print(std::back_inserter(text), doc, 0); std::cout<<text<<std::endl; std::ofstream out("../config/config1.xml"); out << doc; return 0; } //读取并修改config3.xml int ReadAndChangeXml() { rapidxml::file<> fdoc("../config/config2.xml"); std::cout<<fdoc.data()<<std::endl; rapidxml::xml_document<> doc; doc.parse<0>(fdoc.data()); std::cout<<doc.name()<<std::endl; //! 获取根节点 rapidxml::xml_node<>* root = doc.first_node(); std::cout<<root->name()<<std::endl; //! 获取根节点第一个节点 rapidxml::xml_node<>* node1 = root->first_node(); std::cout<<node1->name()<<std::endl; rapidxml::xml_node<>* node11 = node1->first_node(); std::cout<<node11->name()<<std::endl; std::cout<<node11->value()<<std::endl; //! 修改之后再次保存 rapidxml::xml_node<>* size = root->first_node("size"); size->append_node(doc.allocate_node(rapidxml::node_element,"w","1")); size->append_node(doc.allocate_node(rapidxml::node_element,"h","1")); std::string text; rapidxml::print(std::back_inserter(text),doc,0); std::cout<<text<<std::endl; std::ofstream out("../config/config2.xml"); out << doc; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述