c++使用rapidxml
来源:互联网 发布:wpf数据绑定视频 编辑:程序博客网 时间:2024/05/16 04:10
首先到RapidXML官网下载源码,把rapidxml.hpp,rapidxml_iterators.hpp,rapidxml_print.hpp,rapidxml_utils.hpp文件复制到自己的项目中就可以了
1、读取xml文件
原文件的内容如下
<?xml version="1.0" encoding="UTF-8" ?><document>222222222 <English name="name1" value="value">The world has many languages</English> <Heavy>changshuhang;</Heavy> <csh>Umlaut Element</csh> <English1 name="name11" value="value1">The world has many langquagesq</English> <English2 name="name12" value="val5ue">The world has many languagesq7</English> <English3 name="name13" value="valu23e">The world has many languages1</English> <English4 name="name14" value="val4ue">The world has many languages2</English> <English5 name="name15" value="val7ue">The world has many languages3</English> <English6 name="name17" value="va6lue">The world has many languages4</English> <English7 name="name18" value="val9ue">The world has many languages5</English> <English8 name="name19" value="val8ue">The world has many languages6</English> <phonebook> <!--one item behalfs one contacted person.--> <item> <name>miaomaio</name> <addr>Shaanxi Xi'an</addr> <tel>13759911917</tel> <email>miaomiao@home.com</email> </item> <item> <name>gougou</name> <addr>Liaoning Shenyang</addr> <tel>15840330481</tel> <email>gougou@home.com</email> </item> <!--more contacted persons.--> </phonebook></document>
读取xml文件并显示出来
file<> fdoc("E://demo.xml"); //std::cout << fdoc.data() << std::endl; xml_document<> doc; // character type defaults to char doc.parse<0>(fdoc.data()); // 0 means default parse flags //cout << doc << endl; psln(doc.name()); try { doc.parse<0>((char*)fdoc.data()); //会改变参数的内容,tmpbuf的生命周期必须到解析完 } catch (rapidxml::parse_error &e) { err = "parse xml error. "; err += e.what(); psln(err); while(1); } //获取document xml_node<>* root = doc.first_node(); psln(root->name());visitorAll(root);
方法,使用递归的方法全部显示出来
//遍历所有的node文件void visitorAll(xml_node<>* root){ xml_node<>* English = root->first_node(); cout << "-----------------------" << endl; psln(English->name()); //遍历node for (; English; English = English->next_sibling()) { if (English->value_size() == NULL) { visitorAll(English); } else { cout << "####################" << endl; log(English->name(), English->value()); xml_attribute<>* attribute = English->first_attribute(); //遍历attr for (; attribute; attribute = attribute->next_attribute()) { log(attribute->name(), attribute->value()); } } }}
2、生成并保存xml文件
//生成xml文件并保存void save(const char * path){ xml_document<> document; xml_node<>* rot = document.allocate_node(rapidxml::node_pi, document.allocate_string("xml version='1.0' encoding='utf-8'")); document.append_node(rot); //生成根节点 xml_node<>* root = document.allocate_node(node_element, "document", NULL); document.append_node(root); //生成节点 xml_node<>* English = document.allocate_node(node_element, "English", "The world has many languages"); xml_attribute<>* att = document.allocate_attribute("name", "name1"); English->append_attribute(att); xml_attribute<>* att1 = document.allocate_attribute("value", "value123"); English->append_attribute(att1); root->append_node(English); //生成一个array节点 xml_node<>* phonebook = document.allocate_node(node_element, "phonebook", NULL); for (int i = 0; i < 3; i++) { xml_node<>* item = document.allocate_node(node_element, "item", NULL); //name xml_node<>* name = document.allocate_node(node_element, "name", "miaomaio"); item->append_node(name); //addr xml_node<>* addr = document.allocate_node(node_element, "addr", "Shaanxi Xi'an"); item->append_node(addr); //tel xml_node<>* tel = document.allocate_node(node_element, "tel", "13759911917"); item->append_node(tel); //email xml_node<>* email = document.allocate_node(node_element, "name", "miaomiao@home.com"); item->append_node(email); phonebook->append_node(item); } root->append_node(phonebook); std::ofstream out(path); out << document;}
生成后的样式如下
<?xml version='1.0' encoding='utf-8' ?><document> <English name="name1" value="value123">The world has many languages</English> <phonebook> <item> <name>miaomaio</name> <addr>Shaanxi Xi'an</addr> <tel>13759911917</tel> <name>miaomiao@home.com</name> </item> <item> <name>miaomaio</name> <addr>Shaanxi Xi'an</addr> <tel>13759911917</tel> <name>miaomiao@home.com</name> </item> <item> <name>miaomaio</name> <addr>Shaanxi Xi'an</addr> <tel>13759911917</tel> <name>miaomiao@home.com</name> </item> </phonebook></document>
3、修改xml文件
xml_node<>* delnode = root->first_node("English"); xml_node<>* mynode = doc.allocate_node(node_element, "address", "河北"); root->insert_node(delnode, mynode); root->remove_node(delnode);//先删除address节点
1 0
- rapidxml使用
- rapidxml使用
- 使用rapidxml解析xml
- 使用 rapidxml 做配置文件
- RapidXml原理和使用
- RapidXML的使用
- RapidXml原理和使用
- 使用rapidxml读取配置文件
- 使用 rapidxml 做配置文件
- 使用rapidxml创建XML
- c++使用rapidxml
- RAPIDxml的使用
- RapidXml使用(备忘)
- C++ rapidxml的使用
- rapidXml使用笔记
- 使用RapidXML读写XML文件
- 使用rapidxml 生成xml文件
- 使用rapidxml读写xml文件
- Masonry介绍与使用实践(快速上手Autolayout)
- 刨根问底Objective-C Runtime(3)- 消息 和 Category
- 如何判断一个txt文件的编码格式
- 数据结构与算法习题汇总(4)
- 刨根问底Objective-C Runtime(4)- 成员变量与属性
- c++使用rapidxml
- 面向结构化编程与面向对象编程
- 溢出判断
- Bootstrap(四) 菜单、按钮及导航
- Android 中的 Service 全面总结
- 黑幕背后的__block修饰符
- easyui和highcharts 动态加载数据和X轴数据
- 为Docker容器设置固定IP实现网络联通(3)——如何节省IP资源防止主机网络广播风暴
- OTA1-android 升级基本原理