博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rapidxml 修改节点值
阅读量:6227 次
发布时间:2019-06-21

本文共 2091 字,大约阅读时间需要 6 分钟。

  hot3.png

config.xml文件内容:

192.168.1.22
255.255.0.0
169.254.1.1
00:00:00:00:00:01

譬如现在要修改ip节点值为169.254.1.20,代码如下

#include 
#include "rapidxml/rapidxml.hpp"#include "rapidxml/rapidxml_utils.hpp"#include "rapidxml/rapidxml_print.hpp"int main(int argc,char **argv){ rapidxml::file<> file("config.xml"); rapidxml::xml_document<> doc; //doc.parse<0>(file.data()); doc.parse
(file.data()); std::cout << doc.name() << std::endl; //获取根节点 rapidxml::xml_node<> *root = doc.first_node(); std::cout << root->name() << std::endl; rapidxml::xml_node<> *node = root->first_node("sys"); std::cout << node->name() << std::endl; //char *str  = doc.allocate_string("192.168.1.20"); std::string str  = "169.254.1.20"; node->first_node("ip")->value(str.c_str()); std::cout << node->first_node("ip")->value() << std::endl; std::string text; rapidxml::print(std::back_inserter(text), doc, 0); std::cout << text << std::endl; std::ofstream out("config.xml"); out << doc; return 0;}

很多人在修改在序列化xml时用

doc.parse<0>(file.data());

这个是无法修改值的。必须使用如下

doc.parse
(file.data());

具体参加如下描述

Question:

Printing a document having a node with a modified value yields the wrong output. Example:

xml_document<char> doc;

doc.parse<0>(doc.allocate_string("<test>old</test>"));
doc.first_node()->value(doc.allocate_string("new"));

rapidxml::print(cout, doc);

This will print "<test>old</test>" and not "<test>new</test>" as you would expect

Answer:

This is by design, although a little awkward.

The problem is that value of node is only a "shortcut" for the real data, which is stored in child data nodes of the node.

Child data nodes always take precedence over "value" of a node - to change the data you must do either one of the following:

- change the data in child data node(s), not in the value of parent node
- tell parser that you do not want to have data nodes generated (parse_no_data_nodes), in which case you can just change the value

相关连接:

转载于:https://my.oschina.net/mjRao/blog/415067

你可能感兴趣的文章
shell脚本:批量修改文件名
查看>>
详解SimpleXML添加_修改_删除_遍历XML节点属性
查看>>
WPF DataGrid的使用
查看>>
KMP
查看>>
紫书 例题 11-1 UVa 12219 (表达式树)
查看>>
CPU利用率与Load Average的区别?
查看>>
MATLAB数据处理快速学习教程
查看>>
font property font-family does not have generic default?
查看>>
数字三角形
查看>>
GTID复制模式切换与传统主从复制间切换
查看>>
集成测试
查看>>
Python Learning Day1
查看>>
spring 四种注入方式
查看>>
C++Builder的一些学习资料
查看>>
Matlab调用C程序 分类: Matlab c/c...
查看>>
vue+typescript入门学习
查看>>
arpg网页游戏之地图(三)
查看>>
ExecuteScalar 返回值问题
查看>>
python - 自动化测试框架 - 测试报告
查看>>
多线程的那点儿事(基础篇)
查看>>