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的更多相关文章

  1. 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~

    一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...

  2. Java下好用的开源库推荐

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定 ...

  3. 第三方开源库和jar包的区别

    jar包和第三方开源库的根本区别在于,开源库的功能比jar包功能更强大,通过引入库项目可以访问java文件以及该开源库项目下的资源文件,例如图片,layout等文件 jar包中只能放class文件 引 ...

  4. 【转】用JitPack发布开源库时附加文档和源码

    来自:http://www.gcssloop.com/course/jitpack-sources-javadoc 用JitPack发布开源库时附加文档和源码 很早之前写过一篇用JitPack发布An ...

  5. libCURL开源库在VS2010环境下编译安装,配置详解

    libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...

  6. GitHub上那些值得一试的JAVA开源库--转

    原文地址:http://www.jianshu.com/p/ad40e6dd3789 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,S ...

  7. .NET蓝牙开源库:32feet.NET

    在用C#调用蓝牙编程一文中我留个小悬念就是:InTheHand.Net.Personal.dll是怎么来的?这篇文章来解答这个问题,InTheHand.Net.Personal.dll就是来源于今天要 ...

  8. Android Studio 简介及导入 jar 包和第三方开源库方[转]

    原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...

  9. 快快快!27个提升效率的iOS开源库推荐

    文章来源:http://www.csdn.net/article/2015-07-21/2825264-27-ios-open-source-libraries/1 我热爱开源,更喜爱那些花费宝贵的业 ...

随机推荐

  1. 解决 genymotion 安装apk报错 app contains ARM native code and your Genymotion device cannot run ARM instructions

    1.某些APP安装在模拟器时提示“ this probably means that the app contains ARM native code and your Genymotion devi ...

  2. 进程间通讯IPC的几种方式总结

    Linux进程间的通讯 Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同.前者对Unix早期的进程间通信 ...

  3. mybatis(六):设计模式 - 组合模式

  4. NOIP做题练习(day3)

    A - 军队 问题描述 给定一个有 \(n\) 个队伍的人组成的序列,第 \(i\) 个队伍 \(i\) 有 \(s[i]\)个人组成,一个 \(l\) 到 \(r\)的子序列是合法的,当且仅当\(( ...

  5. Windows10安装node.js

    1.下去官网下载node.js https://nodejs.org/zh-cn/download/ 2.安装,直接默认即可,安装路径也可以自己选择 3.设置环境变量 1.安装软件,若是-g,则是全局 ...

  6. zabbix4.2配置邮件+脚本报警:以QQ邮箱为例

    一.邮箱配置:开启smtp服务和授权 开启smtp选项后,系统会生成一个授权,你需要记住这个授权码,后面需要写入配置文件. 二.配置管理mailx: (1)安装mailx:[root@zabbix-s ...

  7. 在VS2017中配置VLD(Visual Leak Detector)内存泄漏检测工具

    首先在官方下载VLD 下载地址: https://kinddragon.github.io/vld/ 此版本为V2.5.1,为最后发布版本,下载后安装.加入你的安装路径为:VLD_Path,后面会用到 ...

  8. if a != None:

    >>> x = 1 >>> not x False >>> x = [1] >>> not x False >>&g ...

  9. 排查 k8s 集群 master 节点无法正常工作的问题

    搭建的是 k8s 高可用集群,用了 3 台 master 节点,2 台 master 节点宕机后,仅剩的 1 台无法正常工作. 运行 kubectl get nodes 命令出现下面的错误 The c ...

  10. bugku 好多压缩包

    https://www.cnblogs.com/WangAoBo/p/6951160.html