rapidxml是一个快速的xml库,由C++模板实现的高效率xml解析库,同时也是boost库的property_tree的内置解析库。
当时rapidxml时,只需要把rapidxml.hpp 、 rapidxml_print.hpp 和 rapidxml_utils.hpp 三个文件拷贝到你的工程目录下,就可以了。
下面的是测试代码 main.cpp
#include <iostream> #include <string> #include <vector> #include "rapidxml/rapidxml.hpp" #include "rapidxml/rapidxml_print.hpp" #include "rapidxml/rapidxml_utils.hpp" using namespace std; int main(int argc,char** argv) { vector<string> v_str ; vector<string>::iterator it ; v_str.push_back("111111"); v_str.push_back("222222"); v_str.push_back("333333"); v_str.push_back("444444"); using namespace rapidxml; xml_document<> doc; //构造一个空的xml文档 xml_node<>* rot = doc.allocate_node(rapidxml::node_pi,doc.allocate_string("setting.xml version='1.0' encoding='utf-8'"));//allocate_node分配一个节点,该节点类型为node_pi,对XML文件进行描,描述内容在allocate_string中 doc.append_node(rot); //把该节点添加到doc中 xml_node<>* node = doc.allocate_node(node_element,"root",NULL); xml_node<>* analysis = doc.allocate_node(node_element,"Analysis",NULL); node->append_node(analysis); for (it = v_str.begin(); it != v_str.end(); it++) { xml_node<>* soinfo = doc.allocate_node(node_element,"soinfo",NULL); soinfo->append_attribute(doc.allocate_attribute("key",it->c_str())); analysis->append_node(soinfo); } xml_node<>* Output = doc.allocate_node(node_element,"Output",NULL); node->append_node(Output); xml_node<>* outinfo = doc.allocate_node(node_element,"outinfo",NULL); Output->append_node(outinfo); for (int j =0;j < 2; j++) { xml_node<>* type = doc.allocate_node(node_element,"desc",NULL); //分配一个type节点, type->append_attribute(doc.allocate_attribute("path","123")); type->append_attribute(doc.allocate_attribute("relation","345")); type->append_attribute(doc.allocate_attribute("priority","567")); outinfo->append_node(type); //把type节点添加到节点outinfo中 } for (it = v_str.begin(); it != v_str.end(); it++) { xml_node<>* rule = doc.allocate_node(node_element,"rule",NULL); Output->append_node(rule); for (int i = 0; i < 2 ; i++) { xml_node<>* cond = doc.allocate_node(node_element,"cond",NULL); cond->append_attribute(doc.allocate_attribute("key","123")); cond->append_attribute(doc.allocate_attribute("value","345")); cond->append_attribute(doc.allocate_attribute("relation","567")); rule->append_node(cond); } xml_node<>* out = doc.allocate_node(node_element,"out",NULL); out->append_attribute(doc.allocate_attribute("where",it->c_str())); rule->append_node(out); } doc.append_node(node); std::ofstream pout("config.xml"); pout << doc; return 0; }
下面是生成的xml文件 config.xml
<?setting.xml version='1.0' encoding='utf-8' ?> <root> <Analysis> <soinfo key="111111"/> <soinfo key="222222"/> <soinfo key="333333"/> <soinfo key="444444"/> </Analysis> <Output> <outinfo> <desc path="123" relation="345" priority="567"/> <desc path="123" relation="345" priority="567"/> </outinfo> <rule> <cond key="123" value="345" relation="567"/> <cond key="123" value="345" relation="567"/> <out where="111111"/> </rule> <rule> <cond key="123" value="345" relation="567"/> <cond key="123" value="345" relation="567"/> <out where="222222"/> </rule> <rule> <cond key="123" value="345" relation="567"/> <cond key="123" value="345" relation="567"/> <out where="333333"/> </rule> <rule> <cond key="123" value="345" relation="567"/> <cond key="123" value="345" relation="567"/> <out where="444444"/> </rule> </Output> </root>原文链接:/xml/298151.html