使用Rapidxml重建xml树
需求 : 重建一棵xml树, 在重建过程中对原来的标签进行一定的修改.
具体修改部分就不给出了, 这里只提供重建部分的代码
code :
/*************************************************************************
> File Name: rapidxml.cpp
> Author: hanhao
> Mail: hanhao@cisco.com
> Created Time: Tue 07 Nov 2017 06:37:05 AM GMT
************************************************************************/ #include<iostream>
#include<fstream>
#include"rapidxml/rapidxml.hpp"
#include"rapidxml/rapidxml_print.hpp"
#include"rapidxml/rapidxml_utils.hpp"
using namespace std;
using namespace rapidxml;
ofstream out("rapidxmloutlog.xml");
xml_document<> doc;
xml_document<> newdoc;
xml_node<> * new_cur;
xml_node<> * new_son; void handlenode(xml_node<> *node){
if(node->type() == node_cdata){
new_cur->append_node(newdoc.allocate_node(rapidxml::node_cdata, NULL, node->value()));
//catch cdata
}
if(node->type() == node_comment){
new_cur->append_node(newdoc.allocate_node(rapidxml::node_comment, NULL, node->value()));
//catch comment
}
if(node->type() == node_element){
new_son = newdoc.allocate_node(rapidxml::node_element, node->name(), node->value());
xml_attribute<> * attr = node -> first_attribute();
while(attr){
new_son->append_attribute(newdoc.allocate_attribute(attr->name(), attr->value()));
attr = attr -> next_attribute();
}
new_cur->append_node(new_son);
new_cur = new_son;
for(node = node -> first_node(); node != NULL; node = node -> next_sibling()){
handlenode(node);
}
new_cur = new_cur->parent();
//catch element
}
}
int main(){
xml_node<>* rot = newdoc.allocate_node(rapidxml::node_pi, newdoc.allocate_string("xml version='1.0' encoding='UTF-8'"));
newdoc.append_node(rot);
new_cur = newdoc.allocate_node(node_element, "han hao");
newdoc.append_node(new_cur);
//add header 4 new doc char xmldoc[] = "tahoe_call_ivr.xml";
file<> file(xmldoc);
doc.parse<parse_comment_nodes>(file.data());
//parse old doc for(xml_node<> *node = doc.first_node(); node != NULL; node = node->next_sibling()){
handlenode(node);
}
//rebuild new doc out<<newdoc<<endl;
return 0;
}
使用Rapidxml重建xml树的更多相关文章
- C#递归生成HTML树,C#递归生成xml树
C#递归生成HTML树 public StringBuilder str = new StringBuilder(); //定义一个字符串 private void get_navigation_ ...
- C#操作Xml树的扩展类
本文提供一个操作Xml树的扩展类,与将xml字符串直接映射成实体对象的使用方法,供大家参考,学习. 下面附上源码 using System; using System.Collections.Gene ...
- [BZOJ29957] 楼房重建 - 线段树
2957: 楼房重建 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3294 Solved: 1554[Submit][Status][Discus ...
- rapidxml编写xml文件(er)
一.以rapidxml::node_declaration形式写xml文件第一行 int write(void) { ; rapidxml::xml_document<> doc; rap ...
- rapidxml读xml文件
student.xml文件内容: int readXML(void) { rapidxml::file<> file("student.xml"); rapidxml: ...
- rapidxml编写xml文件(一)
int writeXML(void) { rapidxml::xml_document<> doc; rapidxml::xml_node<> *rot = doc.alloc ...
- bzoj 2957: 楼房重建 线段树
2957: 楼房重建 Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 小A的楼房外有一大片施 ...
- 使用Rapidxml读取xml文件
现有xml文件如上,写在一个string中.需要获取节点上元素的类别和属性信息,并存储到结构体表中. 结构体如下: 得到的结果如下:
- bzoj 2957 楼房重建 (线段树+思路)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2957 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...
随机推荐
- 优客源创会 西安站 西邮Linux兴趣小组
2016年5月19日晚7:00,优客源创会西安站在西安邮电大学长安校区东区教学楼FF305如期举行,西安邮电大学计算机学院教授.西邮Linux兴趣小组指导老师陈莉君.王小银老师和来自开源中国的周凯先生 ...
- Mysql - 如何存储 10位、13位的 unix 时间戳?
背景 前面有讲过存日期时间可以用 datetime.timestamp 类型:https://www.cnblogs.com/poloyy/p/15546735.html 格式是: YYYY-MM- ...
- c++学习笔记4(函数重载)
一个或多个函数,名字相似,然而参数个数或类型不同,这个叫做函数重载 优点:可以使函数的命名变得简单
- Swift学习笔记(一)
1.Constants and Variables(常量和变量) let定义常量,var定义变量. [Note] If a stored value in your code won't change ...
- 浅谈web前端优化
开篇 优化网站是一个系统性和持续性的过程.很多人认为优化网站的性能只需要合并图片啦,减小HTTP请求啦,部署CDN啦就行,实际上这都是见木不见林的做法.以上的做法经常会被面试者提起,在被问到自己在网页 ...
- 【JavaScript定时器小案例】常见的几种定时器实现的案例
[JavaScript定时器小案例]常见的几种定时器实现的案例 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 在日常开发 ...
- Python编程环境设置
第1节.Python编程环境设置 一.sublime相关 1.sublime REPL插件安装 (1)安装 先打开插件安装面板:ctrl+shift+P 输入install ,选择Package Co ...
- R数据分析:生存分析与有竞争事件的生存分析的做法和解释
今天被粉丝发的文章给难住了,又偷偷去学习了一下竞争风险模型,想起之前写的关于竞争风险模型的做法,真的都是皮毛哟,大家见笑了.想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍 ...
- [bzoj4777]Switch Grass
结论:最短路径一定是单独的一条边且在最小生成树上,可以用反证法证明.那么求出最小生成树,对于每一个点建立一棵权值线段树,再对每一个权值线段树上的叶子节点开一个multiset,维护所有儿子中该种颜色的 ...
- 第一章 初始C语言
第一章 初始C语言 目录 第一章 初始C语言 1. C语言起源 2. 选择C语言的理由 2.1 设计特性 2.2 高效性 2.3 可移植性 2.4 强大而灵活 2.5 面向程序员 3. C语言的应用范 ...