使用rapidxml 生成xml文件

来源:互联网 发布:查看获得mac地址 编辑:程序博客网 时间:2024/05/16 00:50

      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>




0 0