C++ 全栈知识体系C++ 全栈知识体系
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
  • 开发

    • 常用开发库

      • 常用开发库 - 概述
      • 常用开发库 - Cppcheck
      • 常用开发库 - Cppunit
      • 常用开发库 - Drogon
      • 常用开发库 - FastCGI
      • 常用开发库 - Googletest
      • 常用开发库 - Hiredis
      • 常用开发库 - Jsoncpp
      • 常用开发库 - Log4cpp
      • 常用开发库 - Poco
      • 常用开发库 - Protobuf
      • 常用开发库 - Tinyxml
      • 常用开发库 - Yamlcpp
      • 常用开发库 - ZeroMQ
  • 测试

    • 测试理论

      • 测试理论 - 软件测试的发展
      • 测试理论 - 软件开发过程模型
      • 测试理论 - 测试模型
      • 测试理论 - 软件测试分类
      • 测试理论 - 基本原则及流程
    • 测试用例

      • 测试用例 - 概念
      • 测试用例 - 等价类划分法
      • 测试用例 - 边界值测试法
      • 测试用例 - 判定表法
      • 测试用例 - 因果图法
      • 测试用例 - 正交法
      • 测试用例 - 场景法
      • 测试用例 - 功能图法
    • 测试工具

      • 测试工具 - Postman使用
      • 测试工具 - RobotFramework使用

常用开发库 - tinyxml

参考资料

  • 源码
  • TinyXML 使用
  • TinyXML用法小结

概述

TinyXML是一个C++的轻量级的XML解析库, 它基于文档对象模型(DOM)来进行解析。在解析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构。同时,向用户提供一系列的接口来访问和编辑该树结构。

这种方式虽然占用内存大,但是可以给用户提供一个面向对象的访问接口,对用户更为友好,非常方便用户使用。

类图

  • TiXmlBase: 整个TinyXML模型的基类
    • TiXmlAttribute: 元素的属性
    • TiXmlNode: DOM结构中的节点
      • TiXmlComment: 注释
      • TiXmlDeclaration: 申明部分
      • TiXmlDocument: 整个文档
      • TiXmlElement: 元素
      • TiXmlText: 文字部分
      • TiXmlUnknown: 未知部分
      • TiXmlHandler: 针对XML的一些操作

常用方法

基本方法

  • TiXmlDocument::LoadFile: 载入并解析xml文件,成功返回true,失败返回false
  • TiXmlNode::Type(): 获取节点类型,共有6种类型:TINYXML_DOCUMENT / TINYXML_COMMENT / TINYXML_ELEMENT / * TINYXML_TEXT / TINYXML_UNKNOWN / TINYXML_DECLARATION,为定义在 TiXmlNode 中的枚举类型
  • TiXmlNode::Value(): 读取Comment、Element、Text的内容
  • TiXmlNode* TiXmlNode::FirstChild(): 获取当前节点的第一个子节点
  • TiXmlNode* TiXmlNode::FirstChild(const char* value): 获取元素名为 value 的子节点
  • TiXmlNode::NextSibling(): 获取当前节点的下一个兄弟节点
  • TiXmlAttribute* TiXmlElement::FirstAttribute(): 获取 Element 的第一个属性

获取属性信息

  • TiXmlAttribute::Next(): 获取下一个属性地址
  • string TiXmlAttribute::Value(): 获取属性值
  • int TiXmlAttribute::QueryIntValue(int*): 将属性值转为int类型,成功返回TIXML_SUCCESS
  • int TiXmlAttribute::QueryDoubleValue(double*): 将属性值转为double类型,返回值同上
  • int TiXmlElement::QueryStringAttribute(const char* name, string* _value): 获取元素节点的指定属性,返回值同上

类型转换

  • TiXmlText* TiXmlNode::ToText()
  • TiXmlElement* TiXmlNode::ToElement()

其他常用的函数

  • TiXmlDocument::RootElement(): 获取DOM的根元素,本质上是获取节点的第一个子Element

examples下的demo使用

路径: build_lib\examples\examples\3partlib\tinyxml

代码

#include "tinyxmlUtil.h"
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include "StiBel/Util.h"

using namespace std;
string curPath;
string myPrintPath = "/../../../examples/3partlib/tinyxml/conf/school.xml";
string myWritePath = "/../../../examples/3partlib/tinyxml/conf/school-write.xml";
string finalPath;

int main()
{
	printSchoolXml();
	readSchoolXml();
	writeSchoolXml();

	return 0;
}

执行结果:

[root@5d4b980baaa2 tinyxml]# ./tinyxmlTest
<School name="计算机学院">
    <Class name="C++">
        <Student name="Jason" number="1001">
            <grade>98</grade>
            <address>China</address>
        </Student>
        <Student name="Steven" number="1002">
            <grade>80</grade>
            <address>america</address>
        </Student>
    </Class>
    <Class name="Java">
        <Student name="Lucy" number="1003">
            <grade>100</grade>
            <address>London</address>
        </Student>
        <Student name="Marry" number="1004">
            <grade>85</grade>
            <address>Japan</address>
        </Student>
    </Class>
</School>
name : Jason
number : 1001
grade : 98
address : China
name : Steven
number : 1002
grade : 80
address : america
name : Lucy
number : 1003
grade : 100
address : London
name : Marry
number : 1004
grade : 85
address : Japan
Last Updated:
Contributors: klc407073648
Prev
常用开发库 - Protobuf
Next
常用开发库 - Yamlcpp