c++开源库rapidxm
1、引入头文件:
一般用到的头文件:
#include "rapidxml/rapidxml.hpp"
#include "rapidxml/rapidxml_utils.hpp" //rapidxml::file
#include "rapidxml/rapidxml_print.hpp" //rapidxml::print
2、部分类型介绍:
  类:xml_document  
  定义一个该类的对象doc 
  rapidxml::xml_document<> doc; 
  类的定义位置:rapidxml.hpp         类的成员函数:
    1)parse(Ch *text) 将数据解析为DOM Tree 
      使用时doc.parse(text); 
      parseFlag指定格式,可以用’|’来组合使用 
      常用的parseFlag: 
      parseFlag为0表示默认的parseflag
      parse_comment_nodes表示带上xml中的注释 
      parse_no_data_nodes在要修改结点值的时候要设置这个parseFlag
    2) clear() 清空DOM Tree 
      此外xml_document继承自xml_node因此还具有xml_node的方法。
3)获取DOM Tree结点rapidxml::xml_node<> *root; 类:xml_node
常用的类成员函数:
      1)node_type type() const; 获取结点类型 获取的类型是枚举的 
      2)Ch* name() const; 获取结点名 
      3)std::size_t name_size() const; 获取结点名长度 
      4)Ch* value() const; 获取结点值 
      5)std::size_t value_size() const; 获取结点值长度 
      7)xml_node* last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; 获取DOM Tree最后一个子结点的指针
8)xml_attribute* first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; 获取结点的第一个属性指针
9)xml_attribute* next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; 获取结点的下一个属性指针
10)xml_attribute* last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;获取结点的最后一个属性指针
属性指针的格式见类xml_attribute
11)xml_node* previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const;获取上一个同级结点的指针
12)xml_node* next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; 获取下一个同级结点的指针
13)xml_attribute* first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; 获取第一个同级结点的指针
14)xml_attribute* last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; 获取最后一个同级结点的指针
15)void insert_node(xml_node< Ch > *where, xml_node< Ch > *child);在第一个参数指向的结点之前,
  4)获取属性
    类:xml_attribute 
    定义于:rapidxml.hpp 
    常用方法: 
      1)xml_attribute *previous_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const;获取前一个属性 
      2)xml_attribute *next_attribute(const Ch *name = 0, std::size_t name_size = 0, bool case_sensitive = true) const;获取后一个属性
  
  5)为一个新的属性或者结点分配空间
    1)为结点分配空间 
      xml_node* allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0); 
    2)为属性分配空间 
      xml_attribute* allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0);
namespace rapidxml
{
      // Forward declarations
      template<class Ch> class xml_node;
      template<class Ch> class xml_attribute;
      template<class Ch> class xml_document;
  //! Enumeration listing all node types produced by the parser.
      //! Use xml_node::type() function to query node type.
      enum node_type
      {
    //文档节点。 名称和值为空。
            node_document,      //!< A document node. Name and value are empty.
//元素节点。 名称包含元素名称。 值包含第一个数据节点的文本。
node_element, //!< An element node. Name contains element name. Value contains text of first data node.
    //一个数据节点。 名称为空。 值包含数据文本。
            node_data,          //!< A data node. Name is empty. Value contains data text.
    //一个CDATA节点。 名称为空。 值包含数据文本。
            node_cdata,         //!< A CDATA node. Name is empty. Value contains data text.
    //评论节点。 名称为空。 值包含注释text
            node_comment,       //!< A comment node. Name is empty. Value contains comment text.
    //声明节点。 名称和值为空。 声明参数(版本,编码和独立)在节点属性中。
            node_declaration,   //!< A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalone) are in node attributes.
    //DOCTYPE节点。 名称为空。 值包含DOCTYPE文本。
            node_doctype,       //!< A DOCTYPE node. Name is empty. Value contains DOCTYPE text.
    //PI节点。 名称包含目标。 值包含说明。
            node_pi             //!< A PI node. Name contains target. Value contains instructions.
      };
}
c++开源库rapidxm的更多相关文章
- 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~
		一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ... 
- Java下好用的开源库推荐
		作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定 ... 
- 第三方开源库和jar包的区别
		jar包和第三方开源库的根本区别在于,开源库的功能比jar包功能更强大,通过引入库项目可以访问java文件以及该开源库项目下的资源文件,例如图片,layout等文件 jar包中只能放class文件 引 ... 
- 【转】用JitPack发布开源库时附加文档和源码
		来自:http://www.gcssloop.com/course/jitpack-sources-javadoc 用JitPack发布开源库时附加文档和源码 很早之前写过一篇用JitPack发布An ... 
- libCURL开源库在VS2010环境下编译安装,配置详解
		libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ... 
- GitHub上那些值得一试的JAVA开源库--转
		原文地址:http://www.jianshu.com/p/ad40e6dd3789 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,S ... 
- .NET蓝牙开源库:32feet.NET
		在用C#调用蓝牙编程一文中我留个小悬念就是:InTheHand.Net.Personal.dll是怎么来的?这篇文章来解答这个问题,InTheHand.Net.Personal.dll就是来源于今天要 ... 
- Android Studio 简介及导入 jar 包和第三方开源库方[转]
		原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ... 
- 快快快!27个提升效率的iOS开源库推荐
		文章来源:http://www.csdn.net/article/2015-07-21/2825264-27-ios-open-source-libraries/1 我热爱开源,更喜爱那些花费宝贵的业 ... 
随机推荐
- Educational Codeforces Round 80 A-E简要题解
			contest链接:https://codeforces.com/contest/1288 A. Deadline 题意:略 思路:根据题意 x + [d/(x+1)] 需要找到一个x使得上式小于等于 ... 
- JS高级---函数作为返回值使用
			函数作为返回值使用 function f1() { console.log("f1函数开始"); return function () { console.log("函数 ... 
- [CERC2014] Outer space invaders
			题目链接 题意 你受到一群外星人的攻击,第 $i$ 个外星人会在 $ai$ 时间出现,与你的距离为 $di$,且必须在 $bi$ 时间前消灭.你有一个区域冲击波器,每次攻击可以设定一个功率 $R$,这 ... 
- jvm(3):JVM调优
			typora-root-url: ./ JVM调优思路 目的:减少full GC次数.减少STW时间(一次GC的时间) 手段: 打印GC日志-XX:+PrintGCDetails -XX:+Print ... 
- spring(六):事务
			事务特性ACID 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做: 一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行 ... 
- 洛谷 P1659 [国家集训队]拉拉队排练(Manacher)
			题目链接:https://www.luogu.com.cn/problem/P1659 思路: 首先跑一遍Manacher,用$cnt_i$记录长为$i$的回文串有多少个. 所记录的$cnt$并不是最 ... 
- Oracle中的数据迁移到Mysql数据库中的方式Navicat premium工具
			1.安装 Navicat premium工具 2.破解 Navicat premium工具 3.连接需要相互迁移的两个库Mysql和Oracle(可以是远程的或者本机的数据库都是可以的) 4.连接上之 ... 
- 一起了解 .Net Foundation 项目 No.3
			.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. AutoMapper Au ... 
- 973. 最接近原点的 K 个点
			1.暴力排序,新建节点类重载小于符号排序. class Solution { public: struct comb{ int index,distance; comb():index(0),dist ... 
- python入门(十九讲):多进程
			1.进程概念 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动.是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 狭义定义:进程是正在运行的程序的实例. 在早期面向进程设 ... 
