tinyxml是一个开源的C++xml解析工具集,简单、轻量而又高效,所以对于处理xml文件是一个非常不错的选择。

由于它开源,所以可以方便地免费下载,下载地址百度一下很容易找到,这里就不多说了。

下载后将得到一个压缩包,解压后包含很多.h和.cpp文件,只需将其中六个复制到你自己的工程文件夹中即可:

tinyxml.h,

tinystr.h,

tinyxml.cpp,

tinyxmlerror.cpp,

tinyxmlparser.cpp,

tinystr.cpp

如果你使用VS作为开发工具,还需要在以上拷贝的cpp文件中加入#include "stdafx.h"语句。

接着在使用到tinyxml的地方包含:#include"tinyxml.h"   #include"tinystr.h"   即可

接下来就是开发部分,tinyxml的结构图如下:

下面我们举一个简单的例子来说明一下它的用法,本方法使用tinyxml解析gpx文件。gpx是一种xml文档,用于存储GPS数据,也是一种国际标准,解析方法如下:

 StateCode ReadTrackFromGpx(Track* track,char*  Path)
{
cout<<"开始解析gpx文件..."<<endl;
//读取gpx文件
TiXmlDocument xmlDoc( Path);
xmlDoc.LoadFile();
//指向根节点的元素指针
TiXmlElement* xmlRootElement;
//指向子节点的元素指针
TiXmlElement* xmlSubElement;
//节点属性
TiXmlAttribute* rootAttr ;
// TiXmlNode* pNode = NULL; //获取根节点
xmlRootElement = xmlDoc.RootElement();
if (xmlRootElement == NULL)
{
return ;
}
//cout<<"root element is:"<<xmlRootElement->Value()<<endl;
//根节点的属性
rootAttr = xmlRootElement->FirstAttribute();
//cout<<"There is its attributes:"<<endl;
while(rootAttr!= NULL)
{
//cout<<rootAttr->Name()<<":"<<rootAttr->Value()<<endl;
rootAttr = rootAttr->Next();
} xmlSubElement = xmlRootElement->FirstChildElement();
if (xmlSubElement == NULL)
{
return GPX_FILE_EMPTY;//gpx文件为空
}
while(xmlSubElement!=NULL)
{ if(strcmp(xmlSubElement->Value(),"trk")==)
break;
else
xmlSubElement = xmlSubElement->NextSiblingElement();
}
if (xmlSubElement == NULL)
{
return GPX_FILE_TRACK_NOEXIT;//gpx文件中不存在轨迹数据
}
//cout<<"Next is the Trajectory data:"<<endl; xmlSubElement = xmlSubElement->FirstChildElement();
while(xmlSubElement!=NULL)
{
if (strcmp(xmlSubElement->Value(),"trkseg")!=)
//输出name和number
cout<<xmlSubElement->Value()<<":"<<xmlSubElement->GetText()<<endl;
else
break;
xmlSubElement = xmlSubElement->NextSiblingElement();
} if (xmlSubElement == NULL)
{
return GPX_FILE_TRACK_NOEXIT;//gpx文件中不存在轨迹数据
} xmlSubElement = xmlSubElement->FirstChildElement();
rootAttr = xmlSubElement->FirstAttribute();
TiXmlElement* xmlNode=NULL;
while(xmlSubElement!=NULL)
{
trackpoint onepoint;
while(rootAttr!= NULL)
{
//输出经纬度
//cout<<rootAttr->Name()<<":"<<rootAttr->Value()<<endl;
if (strcmp(rootAttr->Name(),"lat")==)
onepoint.lat = stringToNum<double> (rootAttr->Value());
if (strcmp(rootAttr->Name(),"lon")==)
onepoint.lon = stringToNum<double> (rootAttr->Value());
rootAttr = rootAttr->Next();
}
xmlNode = xmlSubElement->FirstChildElement();
while (xmlNode!=NULL)
{
//高程(有的gpx文件中没有)和时间
//cout<<xmlNode->Value()<<":"<<xmlNode->GetText()<<endl;
if (strcmp(xmlNode->Value(),"ele")==)
onepoint.ele = stringToNum<double> (xmlNode->GetText());
if (strcmp(xmlNode->Value(),"time")==)
onepoint.time = xmlNode->GetText();
xmlNode = xmlNode->NextSiblingElement();
} xmlSubElement = xmlSubElement->NextSiblingElement();
if(xmlSubElement!=NULL)
rootAttr = xmlSubElement->FirstAttribute(); track->addPoint(onepoint);
}
track->setStarttime(track->getPointSet()[].time);//获取开始时间
track->setEndtime(track->getPointSet().back().time);//获取结束时间
cout<<"解析结束...";
xmlDoc.Clear();
return GPX_FILE_PASER_SUCCEED;
}

代码中track用于存储轨迹数据。

tinyXML的用法,用于解析gpx文件的更多相关文章

  1. Dom4j的一个小例子,用于解析xml文件的元素获取方式(转)

    import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationExcepti ...

  2. Dom4j的一个小例子,用于解析xml文件的元素获取方式

    import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationExcepti ...

  3. Python3解析dex文件

    一.说明 1.1 背景说明 看<加密与解密>的时候反复听说“PE文件格式”,到Android安全兴起就不断听说“dex文件格式”.意思是看得懂的,但自己不能手解析一番总觉得不踏实,所以决定 ...

  4. 使用Java解析XML文件或XML字符串的例子

    转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...

  5. ‎CocosBuilder 学习笔记(1) CCBReader 解析.ccbi文件流程

    1. 简介 CocosBuilder是免费开源的Cocos2d UI编辑器. .ccb文件是CCB项目的原始文件. .ccbi文件是CCB项目发布后的生成的二进制文件.CCBReader可以快速通过该 ...

  6. C++ 使用TinyXML解析XML文件

    1.介绍 读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM ...

  7. Python中第三方的用于解析HTML的库:BeautifulSoup

    背景 在Python去写爬虫,网页解析等过程中,比如: 如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站 常常需要涉及到HTML等网页的解析. 当然,对于简单的HTML中内 ...

  8. Android程序解析XML文件的方法及使用PULL解析XML案例

    一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...

  9. C++生成和解析XML文件

    1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预 ...

随机推荐

  1. startssl,免费的ssl证书申请及注意事项

    免费的ssl证书,https://www.startssl.com/ 安装到IIS和Nginx有所不同.原文 http://blog.newnaw.com/?p=1232 ------------转自 ...

  2. property attribute: assign, strong, weak, unsafe_unretain and copy

    assign:用于“纯量类型”(如CGFloat 或 NSInteger等): strong:用于“对象类型”,定义了一种“拥有关系”(owning relationship),为这种属性设置新值时, ...

  3. php + Bootstrap-v3-Typeahead 自动完成组件的使用

    Bootstrap 中的 Typeahead 组件就是通常所说的自动完成 AutoComplete,类似百度.谷歌等搜索提示:输入关键词出现相应的下拉列表数据. 是Bootstrap-3-Typeah ...

  4. HTML5新增元素、标签总结

    总是遇到h5新标签的笔试题目,就查阅了资料来总结一下: 1.form相关: (1)form属性:在HTML5中表单元素可放在表单之外,通过给该元素添加form属性来指向目标表单(form属性值设为目标 ...

  5. javascript弹层组件

    组件名称:layui 网址:http://layer.layui.com/ 里面有一个选择日期的组件,在导航的独立组件里,可以用来选择时间.

  6. manacher浅析

    manacher算法的输入是一个字符串,可以计算出以每个字符为中心的最长回文子串的半径.为了避免讨论奇数偶数,将原串的每两个字母之间以及前后各加一个特殊字母,比如'#',那么对于abcbb就变成了 # ...

  7. 忙了好一阵,今天随便写篇关于canvas的小东西

    前几天在朋友圈发了几条3D demo视频,其中就有3D空间组成各种图形.如上! 那么这些图形的每个mesh的坐标可不是手动去写,如果你愿意我当然不拦着!所以今天这篇就来介绍如何获得这些图形的坐标数据. ...

  8. 遍历List中的object对象

    我的解决方法是 List<Object[]> list = queryTrans; for (Object[] o : list) { for (int q = 0; q < o.l ...

  9. osg渲染数据高程文件

    使用gdal解析DEM文件,将高程数据转换为HeightField对象,然后在osg渲染. 1 源代码 #include <gdal_priv.h> #include <osgVie ...

  10. 转帖-[教程] Win7精简教程(简易中度)2016年8月-0day

    [教程] Win7精简教程(简易中度)2016年8月 0day 发表于 2016-8-19 16:08:41  https://www.itsk.com/thread-370260-1-1.html ...