gpt4 book ai didi

Android:需要帮助从 .GPX 文件解析数据

转载 作者:行者123 更新时间:2023-11-29 02:04:26 24 4
gpt4 key购买 nike

我按照教程学习解析 gpx 文件(位于我的原始文件夹中)中的数据,但出于某种原因,没有数据被解析到 NodeList 中。这是我的 XMLParser 类

package bry.Bicker.OjaiHiking;

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.util.Log;

public class XMLParser {

public Document getDomElement(String xml) {
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {

DocumentBuilder db = dbf.newDocumentBuilder();

InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);

} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
return null;
}
// return DOM
return doc;
}

public String getValue(Element e, String str) {
NodeList n = e.getElementsByTagName(str);
return this.getElementValue(n.item(0));
}

public final String getElementValue(Node elem) {
Node child;
if (elem != null) {
if (elem.hasChildNodes()) {
for (child = elem.getFirstChild(); child != null; child = child
.getNextSibling()) {
if (child.getNodeType() == Node.TEXT_NODE) {
return child.getNodeValue();
}
}
}
}
return "";
}

}

下面是我尝试使用类来解析文件的方式:

public void displayPoints(MapView map, Context context) {
final String KEY_TRKPT = "trkpt";
final String KEY_LAT = "lat";
final String KEY_LON = "lon";

XMLParser parser = new XMLParser();
Document doc = parser.getDomElement(getString(R.raw.test));

NodeList n1 = doc.getElementsByTagName(KEY_TRKPT);

if (n1.getLength() > 0) {
int[] lat = new int[n1.getLength()];
int[] lon = new int[n1.getLength()];

for (int i = 0; i < n1.getLength(); i++) {
org.w3c.dom.Element e = (org.w3c.dom.Element) n1.item(i);
lat[i] = Integer.parseInt(parser.getValue(e, KEY_LAT));
lon[i] = Integer.parseInt(parser.getValue(e, KEY_LON));
}
} else {
Log.i("Debug", "XML Parsing error. No data in nodelist.");
}
}

并且 GPX 文件是从应用程序“MyTracks”中导出的。

我没有收到任何错误,但我的消息显示“XML 解析错误。节点列表中没有数据。”被展示。

最佳答案

有一些有用的库——包括我的。查看 this other question on StackOverflow 的答案.基本上我的库提供了两种解析 GPX 文件的方法:一旦你获得/创建了一个 GPXParser 对象(下面示例中的 mParser),你就可以直接解析你的 GPX 文件

Gpx parsedGpx = null;
try {
InputStream in = getAssets().open("test.gpx");
parsedGpx = mParser.parse(in);
} catch (IOException | XmlPullParserException e) {
e.printStackTrace();
}
if (parsedGpx == null) {
// error parsing track
} else {
// do something with the parsed track
}

或者你可以解析一个远程文件:

mParser.parse("http://myserver.com/track.gpx", new GpxFetchedAndParsed() {
@Override
public void onGpxFetchedAndParsed(Gpx gpx) {
if (gpx == null) {
// error parsing track
} else {
// do something with the parsed track
}
}
});

欢迎投稿。

关于Android:需要帮助从 .GPX 文件解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com