前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++那些事之优雅的解析XML

C++那些事之优雅的解析XML

作者头像
公众号guangcity
发布2020-05-28 22:22:35
4.4K0
发布2020-05-28 22:22:35
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

最近使用开源的C++ XML解析器-TinyXML-2,今天主要分享该开源项目的基本情况及使用。

1.TinyXML介绍

TinyXML是一个比较优秀的c++ xml解析器,有两个版本,分别是TinyXML与TinyXML-2。最新开源版本TinyXML-2相对于旧版本的 TinyXml 使用更少的内存 , 更快 , 并且使用更少的内存分配 , 因此被广泛应用于现在开发中。

TinyXml2不需要STL ,自然降低了所有的 STL 支持 , 所有字符串操作使用 const char *。两者相同点:

  • 基于DOM解析
  • API简单
  • 支持UTF-8

不同点:

(1) TinyXML

  • 支持部分STL操作:string、流

(2) TinyXML-2

  • 适合现代C++开发
  • 内存分配少,需要更少的内存
  • 无需STL

TinyXML:

https://sourceforge.net/projects/tinyxml/

TinyXML-2:

https://github.com/leethomason/tinyxml2

2. TinyXML-2使用

使用很简单,下载上述github代码,copy其中的tinyxml2.h与.cpp到你的当前目录下,直接引用.h文件,编译即可。

例如:现有test.xml,parse_test.cpp来解析test.xml中的节点。

test.xml

代码语言:javascript
复制
<category version="1.0">
    <book>茅草屋</book>
    <number>1</number>
    <animal>猫</animal>
</category>

parse_test.cpp

代码语言:javascript
复制
#include "tinyxml2.h"
#include <iostream>

using namespace std;
using namespace tinyxml2;
int main()
{
    XMLDocument xml;
    xml.LoadFile("test.xml");

    XMLElement *category = xml.RootElement();
    XMLElement *book = category->FirstChildElement("book");
    XMLElement *number = category->FirstChildElement("number");
    XMLElement *animal = category->FirstChildElement("animal");
    const char* book_name = book->GetText();
    cout << book_name << endl;
    int num = atoi(number->GetText());
    cout << num << endl;
    const char* animal_name = animal->GetText();
    cout << animal_name << endl;

    return 0;
}

编译:

代码语言:javascript
复制
g++ -o parse parse_test.cpp tinyxml2.cpp

输出:

代码语言:javascript
复制
茅草屋
1
猫

当然还有其他的用法,例如:CRUD操作等,自己可以探索一番。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. TinyXML-2使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档