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. JQuery EasyUI的datagrid的使用方式总结

    JQuery EasyUI的datagrid的使用方式总结第一步:添加样式和js脚本在前台添加展示数据表格的table元素 例如: <div> <table id="tt& ...

  2. Runnable和Thread的区别 (转)

    在java中可有两种方式实现多线程,一种是继承 Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的 run ...

  3. PHP计算时间差,并返回什么时间之前发表的内容

    <?php header("Content-type: text/html; charset=utf-8"); function time2Units ($time){ $y ...

  4. 如何从github上面拷贝源码

    有好奇心的朋友们一定都想看一看很多开源项目的源码,那么github就不用说啦,太多的开源项目都把源码放到上面. 博主最近为了学习angularjs也不得不去github上面弄源码,下面将会介绍如何做: ...

  5. [SDN] What is SDN?

    本篇学习笔记写于 Sun Nov 13 15:08:02 2016, 可能有认识不全面的地方. 参考资料为ONF的官方网站中: Software-Defined Networking (SDN) De ...

  6. 2016年12月23日 星期五 --出埃及记 Exodus 21:18

    2016年12月23日 星期五 --出埃及记 Exodus 21:18 "If men quarrel and one hits the other with a stone or with ...

  7. js的一些复习

    JavaScript Js是一种直译式的脚本语言,是一种弱类型,基于对象的语言.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言 ...

  8. mysql 增删改查基本语句

    增: insert insert into 表名(字段1,字段2,字段3......字段N) values(值1,值2,值3): 如果不申明插入那些字段,则默认所有字段. 在插入时注意,往哪个表增加, ...

  9. Scrum Meeting 3-20151203

    任务安排 姓名 今日任务 明日任务 困难 董元财 请假(明天是编译截至最后一天) 学习上拉加入新的listview 无 胡亚坤 请假(明天是编译截至最后一天) 设计优化聊天页面 无 刘猛 请假(明天是 ...

  10. Scrum Meeting 2-20151202

    任务安排 姓名 今日任务 明日任务 困难 董元财 完成下拉刷新的实现 请假(明天是编译截至最后一天) 无 胡亚坤 完成圆形头像代码设计 请假(明天是编译截至最后一天) 无 刘猛 学习listview的 ...