Posto questa soluzione provvisoria che sicuramente può essere migliorata. Ringrazio ancora Andbin perché il parser l'ho scritto grazie ai suoi consigli in un precedente post.
Main
codice:
package example;
public class Main {
public static void main(String[] args) {
Path path = new Path();
Parser p = new Parser(path);
p.parsing();
}
}
Position
codice:
package example;
public class Position {
private double latitudine;
private double longitudine;
private double altitudine;
public Position(double lat, double lon, double alt) {
latitudine = lat;
longitudine = lon;
altitudine = alt;
}
public void setLatitudine(double lat) {
latitudine = lat;
}
public void setLongitudine(double lon) {
longitudine = lon;
}
public void setAltitudine(double alt) {
altitudine = alt;
}
public double getLongitudine() {
return longitudine;
}
public double getLatitudine() {
return latitudine;
}
public double getAltitudine() {
return altitudine;
}
public String toString() {
String str = "Lat = " + latitudine + " " + "Lon = " + longitudine + " " + "Alt = " + altitudine;
return str;
}
}
Path
codice:
package example;
import java.util.ArrayList;
public class Path {
private ArrayList<Position> path;
public Path() {
path = new ArrayList<>();
}
public ArrayList<Position> getPath() {
return path;
}
public void add(Position p) {
path.add(p);
}
public void get(int index) {
path.get(index);
}
}
Parser
codice:
package example;
import java.io.IOException;
import javax.swing.text.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.DOMException;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Parser {
private Path path;
public Parser(Path p) {
path = p;
}
public void parsing() {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder builder = dbf.newDocumentBuilder();
Document document = (Document) builder.parse("prova.gpx");
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
xpath.setNamespaceContext(new GpxNamespaceContext());
Object result = xpath.evaluate("/gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt", document,
XPathConstants.NODESET);
NodeList list = (NodeList) result;
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
NamedNodeMap nnm = node.getAttributes();
Node latitudine = nnm.getNamedItem("lat");
Node longitudine = nnm.getNamedItem("lon");
Object altitudine = xpath.evaluate("gpx:ele/text()", node,
XPathConstants.STRING);
double lat = Double.parseDouble(latitudine.getNodeValue());
double lon = Double.parseDouble(longitudine.getNodeValue());
double alt = Double.parseDouble(altitudine.toString());
path.add(new Position(lat,lon,alt));
}
}
catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException | DOMException | NumberFormatException e) {
System.err.println(e);
}
}
}