使用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 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...
随机推荐
- Vue&Element开发框架中增加工作流处理,查看申请单中整合多个处理类型的处理
关于我在Winform框架.混合框架.Bootstrap开发框架中的简易审批性工作流模块,我写过不少文章,有兴趣可以参考<工作流模块>的随笔进行了解,本篇随笔在完成了Vue&Ele ...
- 【编译原理】LL1文法语法分析器
上篇文章[编译原理]语法分析--自上向下分析 分析了LL1语法,文章最后说给出栗子,现在补上去. 说明: 这个语法分析器是利用LL1分析方法实现的. 预测分析表和终结符以及非终结符都是针对一个特定文法 ...
- MySQL新建用户并赋予权限:解决命令行与Navicat展示数据库不一致问题
1.创建新用户 'xiaoxiao'密码'123456' mysql> CREATE USER 'xiaoxiao'@'localhost' IDENTIFIED BY '123456'; 2. ...
- jQuery淡入淡出效果
如果是通过鼠标点击事件来触发动画效果可以使用 $("#button").click(function(){ $("#div").stop().fadeToggl ...
- vue中axios的post和get请求示例
POST请求 methods: { isclick() { if (this.account == "" || this.pwd == "") { this.$ ...
- 站长管理服务器必读:Ftp、Ftps与Sftp三兄弟的不同与区别以及部署全指引
文章标题: 站长管理服务器必读:Ftp.Ftps与Sftp三兄弟的不同与区别以及部署全指引 关键字 : ftp,sftp,freesshd,ftps 文章分类: 教程 创建时间: 2020年3月23日 ...
- 菜鸡的Java笔记 生产者与消费者
生产者与消费者 代码要求知道做什么用即可 线程间的通讯问题以及 Object 类的支持 基础模型 现在希望实现一种数据的生产和取出的操作 ...
- silky微服务框架的服务治理介绍
目录 服务治理的概念 服务注册与发现 负载均衡 超时 故障转移(失败重试) 熔断保护(断路器) 限流 RPC限流 HTTP限流 1. 添加配置 2. 注册服务 3.启用 AspNetCoreRateL ...
- WinForm训练一_改变窗体大小
1 //引用系统命名空间 2 using System; 3 //项目命名空间 4 using System.Collections.Generic; 5 using System.Component ...
- Dapr-发布/订阅
前言 前篇文章对Dapr的状态管理进行了解,本篇继续对 订阅/发布 构建块进行了解. 一.定义: 发布订阅的概念来自于事件驱动架构(EDA)的设计思想,这是一种让程序(应用.服务)之间解耦的主要方式, ...