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 标签没有被预 ...
随机推荐
- 关于学习Knockoutjs--入门(二)
这两天终于闲一丢丢了,可以有多点时间学习一下拉.接下来要写到的还是Knockoutjs. Knockout是建立在以下3个核心功能之上的: 1. 属性监控与依赖跟踪 2. 声明式绑定 3. 模版机制 ...
- 使用匿名函数在回调函数中正确访问JS循环变量
有时候, 需要以不同的参数调用某个URL,并且在回调函数中仍然可以访问正在使用的参数, 这时候, 需要使用闭包保存当前参数, 否则, 当回调函数执行时, 之前的参数很可能早已被修改为最后一个参数了. ...
- jenkins+gerrit
Verified 功能 http://www.cnblogs.com/zhanchenjin/p/5032218.html
- linux下cmake编译安装、配置和卸载mysql
WIN10下虚拟机:VMware workstation 12 PRO 安装 # 1.查看系统版本 [root@vm-xiluhua][/home/xiluhua]$ cat /etc/redhat- ...
- WP8没有开发者账号升级GDR3预览版的方法
很多希望尝鲜WP8 GDR3的朋友一样希望提前体验GDR3的效果,但苦于没有开发者账号而不得其门!今天为大家带来普通账号升级GDR3的方法! 工具/原料 WP8智能手机 可用wifi热点 方法/步骤 ...
- JAVA生成图片缩略图、JAVA截取图片局部内容
package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; ...
- zookeeper第二课 客户端的简单命令
zookeeper的每个节点既可以是目录也可以是文件,节点上只存一些协调数据(状态.配置.位置),单位一般是KB,大部分数据用sdfs上 只有持久化的节点才可以有子节点,临时节点不可以有自子节点. 客 ...
- XAF响应式布局皮肤界面展示
XAF为了对手机.平板电脑的支持,增加了新的响应式布局皮肤支持,这个功能已经出来很久了,对于平板电脑.PC的支持已经很不错了,对于手机的界面还不是很完美. 本篇展示一下当前的效果,让有需要的同学.还没 ...
- filter 过滤缓存
package fifter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter ...
- Deep Learning 2_深度学习UFLDL教程:矢量化编程(斯坦福大学深度学习教程)
1前言 本节主要是让人用矢量化编程代替效率比较低的for循环. 在前一节的Sparse Autoencoder练习中已经实现了矢量化编程,所以与前一节的区别只在于本节训练集是用MINIST数据集,而上 ...