常用开发库 - 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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
执行结果:
[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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39