逆战策士 - 专精游戏活动策略库
首页收益排行正文

使用rapidxml 生成xml文件[通俗易懂]

2026-01-28 21:12:22

大家好,又见面了,我是你们的朋友全栈君。

rapidxml是一个快速的xml库,由C++模板实现的高效率xml解析库,同时也是boost库的property_tree的内置解析库。

当时rapidxml时,只需要把rapidxml.hpp 、 rapidxml_print.hpp 和 rapidxml_utils.hpp 三个文件拷贝到你的工程目录下,就可以了。

下面的是测试代码 main.cpp

代码语言:javascript复制#include

#include

#include

#include "rapidxml/rapidxml.hpp"

#include "rapidxml/rapidxml_print.hpp"

#include "rapidxml/rapidxml_utils.hpp"

using namespace std;

int main(int argc, char** argv) {

vector v_str ;

vector::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

代码语言:javascript复制

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160894.html原文链接:https://javaforall.cn

嫄嫄和二饼:红于偶然,火于必然,陷于自我膨胀,最终归于沉寂 罄 - 教育百科
相关内容