tinyXML的用法,用于解析gpx文件
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文件的更多相关文章
- Dom4j的一个小例子,用于解析xml文件的元素获取方式(转)
import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationExcepti ...
- Dom4j的一个小例子,用于解析xml文件的元素获取方式
import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationExcepti ...
- Python3解析dex文件
一.说明 1.1 背景说明 看<加密与解密>的时候反复听说“PE文件格式”,到Android安全兴起就不断听说“dex文件格式”.意思是看得懂的,但自己不能手解析一番总觉得不踏实,所以决定 ...
- 使用Java解析XML文件或XML字符串的例子
转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...
- CocosBuilder 学习笔记(1) CCBReader 解析.ccbi文件流程
1. 简介 CocosBuilder是免费开源的Cocos2d UI编辑器. .ccb文件是CCB项目的原始文件. .ccbi文件是CCB项目发布后的生成的二进制文件.CCBReader可以快速通过该 ...
- C++ 使用TinyXML解析XML文件
1.介绍 读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM ...
- Python中第三方的用于解析HTML的库:BeautifulSoup
背景 在Python去写爬虫,网页解析等过程中,比如: 如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站 常常需要涉及到HTML等网页的解析. 当然,对于简单的HTML中内 ...
- Android程序解析XML文件的方法及使用PULL解析XML案例
一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...
- C++生成和解析XML文件
1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预 ...
随机推荐
- 谈谈对AOP的理解
Aspect Oriented Programming 面向切面编程.解耦是程序员编码开发过程中一直追求的.AOP也是为了解耦所诞生. 具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之 ...
- Date类型,Boolean类型,Number类型
1.Date类型: 1)创建Date对象: var date=new Date(); //Date对象会把当前日期和时间保存为其初始值 2)Date对象的方法: --这些得到的都是数字 ...
- jQuery判断元素是否存在方法
1.使用javascript判断元素是否存在 if(document.getElementById('div')) { } else { } 2.使用jquery判断元素是否存在 if ($(&quo ...
- MyEclipse 10.7 添加JBOSS 6应用服务器
首先,确保你的JAVA和JBOSS的环境变量配置正确然后,在myeclipse中,window->preferences->myeclipse->servers->JBOSS- ...
- Vsftpd 配置
步骤 本次是在CentOS 6的版本上操作的. 说明:以下命令均在root用户下执行. (1)安装vsftpd 没啥好说的一条命令搞定. $yum install vsftpd 中间会提示确认,输 ...
- shell awk入门
本文参考自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/11/2586985.html awk:好用的数据处理工具 awk 也是一个非常棒的数据处 ...
- day 2
三目运算符 A?B:C 等价于 if(A) B; else C; 实例: int i: i=(3>2?5:1) //如果3>2为真,i的值为5,否则为1 printf(“%d”,i): ...
- Greenplum 在Linux下的安装
1.实验环境 1.1.硬件环境 Oracle VM VirtualBox虚拟机软件:三台Linux虚拟机:Centos 6.5:数据库:greenplum-db-4.3.9.1-build-1-rhe ...
- MFC编程入门之十七(对话框:文件对话框)
上一讲介绍的是消息对话框,本节讲解文件对话框.文件对话框也是很常用的一类对话框. 文件对话框的分类 文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框 ...
- MFC编程入门之十六(对话框:消息对话框)
前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消息对话 ...