1、rapidxml修改节点的value,修改之后,序列化还是原来的值,具体原因是什么,要看rapidxml是怎么实现的。如下:

void TestRapidXml()
{
char* xmlContent = new char[];
sprintf(xmlContent,"<root><head>aaa</head><body x=\"10\">bbb</body></root>"); xml_document<> xmlDoc;
xmlDoc.parse<>(xmlContent); xml_node<>* body = xmlDoc.first_node()->first_node("body");
body->value("ccc"); xml_attribute<>* x = body->first_attribute("x");
x->value(""); string xmlStr = "";
// xmlString为 <root><head>aaa</head><body x=\"20\">bbb</body></root>
// 也就是说,attr的value可以修改成功,而node的value还是旧值。
rapidxml::print(std::back_inserter(xmlStr),xmlDoc,); delete []xmlContent;
}

2、怎么解决上面的问题,笨办法,既然不能修改,我就添加一个新的,删除老的。如下:

void TestRapidXml()
{
char* xmlContent = new char[];
sprintf(xmlContent,"<root><head>aaa</head><body x=\"10\">bbb</body></root>"); xml_document<> xmlDoc;
xmlDoc.parse<>(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"));
// 插入一个新的body
root->insert_node(body,newBody); // 复制老body的attr
for(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);
}
// 删除老的body
root->remove_node(body); string xmlStr = "";
// xmlString为 <root><head>aaa</head><body x=\"10\">ccc</body></root>
rapidxml::print(std::back_inserter(xmlStr),xmlDoc,); delete []xmlContent;
}

3、还有一个办法,就是使用 xmlDoc.parse<parse_no_data_nodes>(xmlContent); 如下:

void TestRapidXml()
{
char* xmlContent = new char[];
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(""); string xmlStr = "";
// xmlString为 <root><head>aaa</head><body x=\"20\">ccc</body></root>
rapidxml::print(std::back_inserter(xmlStr),xmlDoc,); delete []xmlContent;
}

rapidxml修改节点的值的更多相关文章

  1. C# 如何获取自定义的config中节点的值,并修改节点的值

    现定义一个方法 DIYConfigHelper.cs using System; using System.Xml; using System.Configuration; using System. ...

  2. c# winform TreeView NODE(节点) 重命名或获取节点修改后的值

    在程序开发过程中我们经常用到treeview,还经常要修改节点的名字.节点名字修改后还想及时更新数据库.这时问题就来了,怎样获取NODE(节点)更新后的值呢?本人试了很多方法最终分析出treeview ...

  3. rapidxml 解析修改内存的值

    1.使用rapidxml解析的时候,也就是 调用xmlDoc.parse<0>(xmlContent),特别注意,rapidxml会修改内存的值,把右尖括号>修改为'\0',因此特别 ...

  4. 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点

    使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...

  5. java操作xml文件--修改节点

          上一篇文章我介绍了SAX方法解析XML文件的过程,这篇文章讲解的内容是利用DOM方法修改XML文件的节点内容.       下面依然是首先贴出XML文件: <?xml version ...

  6. C# xml 读xml、写xml、Xpath、Xml to Linq、xml添加节点 xml修改节点

    #region XDocument //创建XDocument XDocument xdoc2 = new XDocument(); XElement xel1= new XElement(" ...

  7. c#操作xml的代码(插入节点、修改节点、删除节点等)

    bookstore.xml文件内容: 复制代码代码示例: <?xml version="1.0" encoding="gb2312"?><bo ...

  8. 用TinyXml做XML解析示例 TinyXml查找唯一节点及修改节点操作

    // 读者对象:对TinyXml有一定了解的人.本文是对TinyXml工具的一些知识点的理解. // 1 TinyXml中对TiXmlNode进行了分类,是用一个枚举进行描述的. // enum No ...

  9. 剑指offer3:从尾到头打印链表每个节点的值

    1. 题目描述 输入一个链表,从尾到头打印链表每个节点的值. 2. 思路和方法 2.1 推荐的方法 (1)栈,循环 后进先出,我们可以用栈实现这种顺序.每经过一个结点的时候,把该节点放到一个栈里面,当 ...

随机推荐

  1. Android ContentObserver详解

    前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对Content ...

  2. 拆分Cocos2dx渲染部分代码

    纹理实现 思想 这个是Cocos2dx的渲染部分的最基本的实现,被我拆分到mac上,但是并不是用的EGLContext,而是搭配glfw,还有soil第三方图形库. 实现 // // main.cpp ...

  3. 移动web开发经验总结(1)

    1.<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, minimum-sca ...

  4. numpy中的random函数

    1:rand rand(d0, d1, ..., dn)    Random values in a given shape.    Create an array of the given shap ...

  5. 【scrapy】使用方法概要(三)(转)

    请初学者作为参考,不建议高手看这个浪费时间] 前两篇大概讲述了scrapy的安装及工作流程.这篇文章主要以一个实例来介绍scrapy的开发流程,本想以教程自带的dirbot作为例子,但感觉大家应该最先 ...

  6. python中的__all__和__slots__

    python两个有趣属性__all__可用于模块导入时限制,如:from module import *此时被导入模块若定义了__all__属性,则只有all内指定的属性.方法.类可被导入~若没定义, ...

  7. SyncthingTray -- Syncthing wrapper for Windows

    SyncthingTray Syncthing wrapper for Windows. Includes a small interface to configure start on boot a ...

  8. max_binlog_cache_size

    http://blog.mimvp.com/2017/07/mysql-yi-ge-can-shu-yin-qi-de-dang-ji-xue-an/ max_binlog_cache_size 表示 ...

  9. GCC 对C语言的扩展

    http://www.cnblogs.com/emituofo/archive/2012/07/20/2600995.html http://blog.csdn.net/andyhuabing/art ...

  10. arcgis python 沿线生成点

    # coding: utf-8 """ Source Name: generatepointsfromlines.py Version: ArcGIS 10.4/Pro ...