需求 : 重建一棵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树的更多相关文章

  1. C#递归生成HTML树,C#递归生成xml树

    C#递归生成HTML树 public StringBuilder str = new StringBuilder();   //定义一个字符串 private void get_navigation_ ...

  2. C#操作Xml树的扩展类

    本文提供一个操作Xml树的扩展类,与将xml字符串直接映射成实体对象的使用方法,供大家参考,学习. 下面附上源码 using System; using System.Collections.Gene ...

  3. [BZOJ29957] 楼房重建 - 线段树

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3294  Solved: 1554[Submit][Status][Discus ...

  4. rapidxml编写xml文件(er)

    一.以rapidxml::node_declaration形式写xml文件第一行 int write(void) { ; rapidxml::xml_document<> doc; rap ...

  5. rapidxml读xml文件

    student.xml文件内容: int readXML(void) { rapidxml::file<> file("student.xml"); rapidxml: ...

  6. rapidxml编写xml文件(一)

    int writeXML(void) { rapidxml::xml_document<> doc; rapidxml::xml_node<> *rot = doc.alloc ...

  7. bzoj 2957: 楼房重建 线段树

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 小A的楼房外有一大片施 ...

  8. 使用Rapidxml读取xml文件

    现有xml文件如上,写在一个string中.需要获取节点上元素的类别和属性信息,并存储到结构体表中. 结构体如下: 得到的结果如下:

  9. bzoj 2957 楼房重建 (线段树+思路)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2957 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...

随机推荐

  1. 第35篇-方法调用指令之invokespecial与invokestatic

    这一篇将详细介绍invokespecial和invokestatic字节码指令的汇编实现逻辑 1.invokespecial指令 invokespecial指令的模板定义如下: def(Bytecod ...

  2. cm3 逆向分析

    目录 cm3 逆向分析 前言 逆向分析 cm3 逆向分析 前言 这道题没加壳,也没加密算法,主要看代码逻辑. 逆向分析 代码很短,一共这么几句. 看提示知道只让我们输入w.s.a.d这几个字符,并且用 ...

  3. filter tools

    // 过滤商品分类 Vue.filter("cateFilter", (data) => {   let tmp = ["一级分类", "二级分 ...

  4. Java开发介绍之JDK JRE JVM 和 环境变量配置

    一.JDK>JRE>JVM JDK(Java Development Kit):Java开发工具包 JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和 ...

  5. KMP算法,看这篇就够了!

    普通的模式匹配算法(BF算法) 子串的定位操作通常称为模式匹配算法 假设有一个需求,需要我们从串"a b a b c a b c a c b a b"中,寻找内容为"a ...

  6. 第一课 Dubbo背景及原理

    1 . 技术背景 Dubbo每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于 ...

  7. Mui中mui.openWindow()方法具体参数信息(内容来自Mui问题专区)

    mui.openWindow({ url: 'xxx.html', //String类型,要打开的界面的地址 id: 'id', //String类型,要打开的界面的id styles: { //We ...

  8. 2014年3月5日C#训练

    using System; class Program { static void Main() { Console.WriteLine("请输入两个整数:"); int a = ...

  9. 04373 C++程序设计 2019版 第一章习题五、程序设计题

    题目: 1.编写一个程序,将从键盘输入的n个字符串保存在一个一维数组A中.在输入字符串之前,先输入n的值.要求,数组A需要动态申请空间,程序运行结束前再释放掉. #include <iostre ...

  10. [loj3341]时代的眼泪

    题意即求在区间$[l,r]$中且权值在$[x,y]$中的逆序对个数 考虑分块,逆序对个数包含4部分: 1.左/右块外内部,预处理出$i$到其所在块的块首/尾,小于/小于等于$j$(需要对$j$离散)的 ...