【问题标题】:How to read GPX file ( xml format) in QT?如何在 QT 中读取 GPX 文件(xml 格式)?
【发布时间】:2014-01-09 08:25:32
【问题描述】:
我有一个 gpx 文件,基本上就是一个 xml 文件。我想从中读取纬度和经度值。下面我发布了示例 gpx 文件。
<gpx>
<wpt lon="80.0124" lat="13.125">
</wpt>
<wpt lon="80.0130" lat="13.124">
</wpt>
<wpt lon="80.0145" lat="13.122">
</wpt>
<wpt lon="80.0120" lat="13.121">
</wpt>
</gpx>
我需要获取纬度和经度的浮点值。感谢您提供任何帮助和建议。
谢谢。我可以得到不带双引号的结果吗?
【问题讨论】:
标签:
c++
qt
qtcore
qfile
qxmlstreamreader
【解决方案1】:
这里的关键类是QXmlStreamReader。
请参阅下面的代码以使其工作。
test.xml
<gpx>
<wpt lon="80.0124" lat="13.125">
</wpt>
<wpt lon="80.0130" lat="13.124">
</wpt>
<wpt lon="80.0145" lat="13.122">
</wpt>
<wpt lon="80.0120" lat="13.121">
</wpt>
</gpx>
main.cpp
#include <QXmlStreamReader>
#include <QDebug>
#include <QString>
#include <QFile>
int main()
{
QFile file("test.xml");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "File open error:" << file.errorString();
return 1;
}
QXmlStreamReader inputStream(&file);
while (!inputStream.atEnd() && !inputStream.hasError())
{
inputStream.readNext();
if (inputStream.isStartElement()) {
QString name = inputStream.name().toString();
if (name == "wpt")
qDebug() << "lon:" << inputStream.attributes().value("lon").toFloat() << "lat:" << inputStream.attributes().value("lat").toFloat();
}
}
return 0;
}
main.pro
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
构建并运行
qmake && make && ./main
输出
lon: 80.0124 lat: 13.125
lon: 80.013 lat: 13.124
lon: 80.0145 lat: 13.122
lon: 80.012 lat: 13.121