rapidxml修改节点的值
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修改节点的值的更多相关文章
- C# 如何获取自定义的config中节点的值,并修改节点的值
现定义一个方法 DIYConfigHelper.cs using System; using System.Xml; using System.Configuration; using System. ...
- c# winform TreeView NODE(节点) 重命名或获取节点修改后的值
在程序开发过程中我们经常用到treeview,还经常要修改节点的名字.节点名字修改后还想及时更新数据库.这时问题就来了,怎样获取NODE(节点)更新后的值呢?本人试了很多方法最终分析出treeview ...
- rapidxml 解析修改内存的值
1.使用rapidxml解析的时候,也就是 调用xmlDoc.parse<0>(xmlContent),特别注意,rapidxml会修改内存的值,把右尖括号>修改为'\0',因此特别 ...
- 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点
使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...
- java操作xml文件--修改节点
上一篇文章我介绍了SAX方法解析XML文件的过程,这篇文章讲解的内容是利用DOM方法修改XML文件的节点内容. 下面依然是首先贴出XML文件: <?xml version ...
- C# xml 读xml、写xml、Xpath、Xml to Linq、xml添加节点 xml修改节点
#region XDocument //创建XDocument XDocument xdoc2 = new XDocument(); XElement xel1= new XElement(" ...
- c#操作xml的代码(插入节点、修改节点、删除节点等)
bookstore.xml文件内容: 复制代码代码示例: <?xml version="1.0" encoding="gb2312"?><bo ...
- 用TinyXml做XML解析示例 TinyXml查找唯一节点及修改节点操作
// 读者对象:对TinyXml有一定了解的人.本文是对TinyXml工具的一些知识点的理解. // 1 TinyXml中对TiXmlNode进行了分类,是用一个枚举进行描述的. // enum No ...
- 剑指offer3:从尾到头打印链表每个节点的值
1. 题目描述 输入一个链表,从尾到头打印链表每个节点的值. 2. 思路和方法 2.1 推荐的方法 (1)栈,循环 后进先出,我们可以用栈实现这种顺序.每经过一个结点的时候,把该节点放到一个栈里面,当 ...
随机推荐
- Git版本管理工具对比(GitBash、EGit、SourceTree)
Git管理工具对比(GitBash.EGit.SourceTree) GitBash是采用命令行的方式对版本进行管理,功能最为灵活强大,但是由于需要手动输入希望修改的文件名,所以相对繁琐. EGit是 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- Loj10094 消息的传递
题目描述 我们的郭嘉大大在曹操这过得逍遥自在,但是有一天曹操给了他一个任务,在建邺城内有 NNN 个袁绍的奸细,将他们从 111 到 NNN 进行编号,同时他们之间存在一种传递关系,即若Ci,j=1C ...
- DataTable初次使用笔记
概述:DataTable是一个jQuery插件,用于生成HTML表格,功能很强大. 使用: 使用DataTable需要引入jQuery,因为他是基于jQuery的插件,然后引入DataTable的js ...
- ant design Modal遮罩层颜色加深 解决方案
1.原因 页面中存在多个Modal同时渲染及弹出(在table里使用Modal就会出现这种问题) 2.解决方案 不让多个Modal同时渲染就行了,设置Modal的visible属性为this.stat ...
- 新型穿墙监控雷达Range-R:让你的隐私无所遁形(转)
还是隐私问题,原帖地址:http://www.freebuf.com/news/57446.html 在我们的认知中,政府对民众的监控已经成为一种常态.从电话.电子邮件到通信聊天.社交网络,一切细节都 ...
- POJ 2104 && POJ 2761 (静态区间第k大,主席树)
查询区间第K大,而且没有修改. 使用划分树是可以做的. 作为主席树的入门题,感觉太神奇了,Orz /* *********************************************** ...
- 74HC125 74HCT125 74LV125 74LVC125
74HC125; 74HCT125Quad buffer/line driver; 3-state The 74HC125; 74HCT125 is a quad buffer/line driver ...
- 在gdb将所有线程的堆栈输出到文件中去
http://m.blog.csdn.net/blog/lantianjialiang/40111253
- 【《Objective-C基础教程 》笔记ch03】(四)OC中的OOP
一.声明类接口步骤: 1.声明一个类接口,使用@interfacekeyword加上类名称. 2.用 { 实例变量 } 来定义各种数据成员. 3.方法声明,採用中缀符语法声明一个c函数,用到了冒号 ...