XML语法文件解析工具TinyXML2

本篇记录C++解析XML文件,TinyXML2支持解析XML语法的文件,不限于以.XML结尾的文件。
代码来自官方文档地址:http://www.grinninglizard.com/tinyxml2docs/pages.html

  1. 环境:VS2013,win10
  2. tinyxml2安装:下载VS插件NuGet(程序包管理工具),并安装(安装完之后要重启VS),新建一个控制台项目,创建成功后,在项目名称上右键,有一个选项“管理NuGet程序包”,点击,选择联机——>All,右上角搜索tinyxml2,选择TinyXML-2安装。
  3. 代码说明:
    • 解析的xml来源可以是文件或者是字符串,两种解析方法都写了。
    • 属性值有两种表示方式,xml标签属性和子标签。两种解析方法都写了。
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include"tinyxml2.h"
#include<iostream>

using namespace std;
using namespace tinyxml2;

int main()
{

XMLDocument doc;
//Parse an XML from char buffer
//Get information out of XML
static const char* xml =
"<?xml version=\"1.0\"?>"
"<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
"<PLAY>"
"<TITLE>A Midsummer Night's Dream</TITLE>"
"</PLAY>";
doc.Parse(xml);
XMLElement* titleElement = doc.FirstChildElement("PLAY")->FirstChildElement("TITLE");
const char* title = titleElement->GetText();
printf("Name of play (1):%s\n",title);//输出Name of play (1):A Midsummer Night's Dream

//Read attributes and text information.
//way 1
xml="<?xml version=\"1.0\"?>"
"<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
"<PLAY>"
"<TITLE>A Midsummer Night's <b>Dream</b></TITLE>"
"</PLAY>";
doc.Parse(xml);
XMLText* textNode = titleElement->FirstChild()->ToText();
title = textNode->Value();
printf("Name of play (2): %s\n", title);//输出Name of play (2): A Midsummer Night's

//way 2
xml ="<information>"
" <attributeApproach v='2' />"
" <textApproach>"
" <v>-2</v>"
" </textApproach>"
"</information>";
doc.Parse(xml);
int v0=-1;
XMLElement* attributeApproachElement = doc.FirstChildElement()->FirstChildElement("attributeApproach");
attributeApproachElement->QueryAttribute("v", &v0);
printf("v0=%d\n", v0);//输出v0=2
int v1 = -1;
XMLElement* textApproachElement = doc.FirstChildElement()->FirstChildElement("textApproach");
textApproachElement->FirstChildElement("v")->QueryIntText(&v1);
printf("v1=%d\n", v1);//输出v1=-2

//load xml file and get information out of xml file
doc.LoadFile("test.xml");
titleElement = NULL;
title = NULL;
titleElement = doc.FirstChildElement("PLAY")->FirstChildElement("TITLE");
title = titleElement->GetText();
printf("Name of play (1):%s\n", title);//输出Name of play (1):A Midsummer Night's Dream
}

test.xml文件如下

1
2
3
4
<?xml version="1.0"?>
<PLAY>
<TITLE>A Midsummer Night's Dream</TITLE>
</PLAY>

结果显示如下:
result

热评文章