rapidxml修改节点的值
1、rapidxml修改节点的value,修改之后,序列化还是原来的值,具体原因是什么,要看rapidxml是怎么实现的。如下:
void TestRapidXml() {char* xmlContent = new char[1024];sprintf(xmlContent,"<root><head>aaa</head><body x=\"10\">bbb</body></root>");xml_document<> xmlDoc;xmlDoc.parse<0>(xmlContent);xml_node<>* body = xmlDoc.first_node()->first_node("body");body->value("ccc");xml_attribute<>* x = body->first_attribute("x");x->value("20"); string xmlStr = "";// xmlString为 <root><head>aaa</head><body x=\"20\">bbb</body></root>// 也就是说,attr的value可以修改成功,而node的value还是旧值。rapidxml::print(std::back_inserter(xmlStr),xmlDoc,0); delete []xmlContent; }
2、怎么解决上面的问题,笨办法,既然不能修改,我就添加一个新的,删除老的。如下:
void TestRapidXml() {char* xmlContent = new char[1024];sprintf(xmlContent,"<root><head>aaa</head><body x=\"10\">bbb</body></root>");xml_document<> xmlDoc;xmlDoc.parse<0>(xmlContent);xml_node<>* root = xmlDoc.first_node();xml_node<>* body = root->first_node("body");xml_node<>* newBody = xmlDoc.allocate_node(node_element,xmlDoc.allocate_string("body"),xmlDoc.allocate_string("ccc"));// 插入一个新的bodyroot->insert_node(body,newBody);// 复制老body的attrfor(xml_attribute<>* attr = body->first_attribute();attr!=NULL;attr=attr->next_attribute()){xml_attribute<>* copy = xmlDoc.allocate_attribute(xmlDoc.allocate_string(attr->name()),xmlDoc.allocate_string(xmlDoc.allocate_string(attr->value())));newBody->append_attribute(copy);}// 删除老的bodyroot->remove_node(body);string xmlStr = "";// xmlString为 <root><head>aaa</head><body x=\"10\">ccc</body></root>rapidxml::print(std::back_inserter(xmlStr),xmlDoc,0); delete []xmlContent; }
3、还有一个办法,就是使用 xmlDoc.parse<parse_no_data_nodes>(xmlContent); 如下:
void TestRapidXml() {char* xmlContent = new char[1024];sprintf(xmlContent,"<root><head>aaa</head><body x=\"10\">bbb</body></root>");xml_document<> xmlDoc;//xmlDoc.parse<0>(xmlContent);xmlDoc.parse<parse_no_data_nodes>(xmlContent);xml_node<>* body = xmlDoc.first_node()->first_node("body");body->value("ccc");xml_attribute<>* x = body->first_attribute("x");x->value("20"); string xmlStr = "";// xmlString为 <root><head>aaa</head><body x=\"20\">ccc</body></root>rapidxml::print(std::back_inserter(xmlStr),xmlDoc,0); delete []xmlContent; }
rapidxml修改节点的值相关推荐
- php如何修改xml中element值,php修改xml节点的值
今天刚刚实现的功能,找了很多资料,本来想用xpath,但是由于对xpath不甚了解.绕了个大圈后还是决定用DOMDocument来做. 在此做一个标记,以后找资料的时候也不用太辛苦. 先从数据库读取数 ...
- java操作xml文件--修改节点
上一篇文章我介绍了SAX方法解析XML文件的过程,这篇文章讲解的内容是利用DOM方法修改XML文件的节点内容. 下面依然是首先贴出XML文件: <?xml version ...
- JQueryDOM之修改节点
修改节点 修改文档中的元素节点可以使用多种方法:复制节点.替换节点.包裹节点 复制节点: $(element).clone() 复制节点方法能够复制节点元素,并且能够根据参数决定是否复制节点元素的行为 ...
- 我的世界服务器神秘修改节点,我的世界如何用NBT指令方块修改神秘时代4
我的世界中有一种NBT指令方块可以用来方便的修改游戏,这个方块能不能用来修改神秘时代了,小编给大家带来了用NBT方块修改神秘时代4的方法,希望大家喜欢. 注:有注释标示的地方请寻找同样颜色的标示 NB ...
- 我的世界服务器神秘修改节点,我的世界NBT指令
在我的世界中玩家可以用NBT指令修改游戏,从而让游戏变得更有趣味性,其中游戏中有一种神秘时代4的MOD,它的可玩性非常之高,如果用NBT指令对它进行修改的话,可以让我们更好的体验游戏,那么具体修改方法 ...
- 高通MSM8909平台L1系统修改LDO电压值
文档说明 本文档以SC806-CN-00(MSM8909平台)为例,说明如何修改LDO电压值. 修改方法 以修改LDO5,从1.8V改为1.9V为例. 首先查看PM8909的IC specificat ...
- 数据结构,单链表讲解,并使用Java代码实现单链表增删改查【尾部添加,中间插入、修改节点、删除节点、展示链表】
文章目录 单链表 什么是单链表,链式存储结构详解 链表的节点 头节点,头指针和首元节点 单链表的实现 1.尾部添加新节点 思路分析 代码实现 注意事项 2.按照编号插入新节点 思路分析 代码实现 注意 ...
- 转载非原创:修改BB 的内容,回车后修改CC 的值
原文 http://blog.csdn.net/iamah/article/details/8438981 修改BB 的内容,回车后修改CC 的值 步骤: 1. 注册类为对类CL_GUI_ALV_GR ...
- LeetCode 965 Univalued Binary Tree--判断二叉树的所有节点的值是否相同--python,java解法
题目地址:Univalued Binary Tree - LeetCode Acceptance: 67.6% Difficulty: Easy A binary tree is univalued ...
最新文章
- linux的文件压缩与解压缩,linux(文件压缩与解压缩)
- Java算法试题--猜字母/杀人游戏
- 2D变3D,视角随意换,神还原高清立体感,还是不用3D建模的那种 | 代码数据开源...
- 等值连接_干货:16种等值线图的解读与应用,用快速规律解题
- 介绍微服务框架Micro笔记
- 在ubuntu上安装,使用MQTT Mosquitto
- 最大公约数简便算法_求最大公约数的4种算法
- 【RK3399Pro学习笔记】十五、ROS中launch启动文件的使用方法
- linux 内核空间 sy,在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysf...
- HTML5清爽博客自媒体网站模板
- RocketMQ : UpdateTopicSubCommand command failed connect to xxx:10909 failed
- 《Scala机器学习》一一
- AD封装库转成pads封装库
- 数字电路为什么是低电平有效的多
- 南通全国计算机等级考试,南通大学2017年3月全国计算机等级考试报名通知
- win10拨号上网开启热点
- android 计步器 开发,Android计步器开发
- MAC 安装PS 破解
- [ARM+Linux] 基于全志h616外设开发笔记
- 操系统原理课内实习二