Capito! Questo XPath sembra molto utile. Quindi se io volessi estrapolare solo gli attributi degli elementi <trkpt> (latitudine e longitudine) E l'elevazione dentro <ele> dovrei andare a modificare questa riga prima di tutto:
codice:
Object result = xpath.evaluate("/gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt/gpx:time/text()",
document,XPathConstants.NODESET);
Aggiornamento:
Si a quanto pare 
codice:
import java.util.*;
import javax.xml.XMLConstants;
import javax.xml.namespace.*;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class Main {
public static void main(String [] args) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder builder = dbf.newDocumentBuilder();
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();
System.out.println(nnm.item(0) + " " + nnm.item(1));
}
}
catch (Exception e) {
System.err.println(e);
}
}
}
class GpxNamespaceContext implements NamespaceContext {
public String getNamespaceURI(String prefix) {
if (prefix == null) {
throw new IllegalArgumentException("prefix cannot be null");
} else if (prefix.equals("gpx")) {
return "http://www.topografix.com/GPX/1/1";
} else {
return XMLConstants.NULL_NS_URI;
}
}
public String getPrefix(String namespaceURI) {
return null; // getPrefix non serve in questo caso
}
public Iterator getPrefixes(String namespaceURI) {
return null; // getPrefixes non serve in questo caso
}
}
Così ottengo questo output:
codice:
lat="40.132004" lon="15.831839"
lat="40.131973" lon="15.831815"
lat="40.131897" lon="15.831679"
lat="40.131798" lon="15.831541"
lat="40.131794" lon="15.831545"
lat="40.131699" lon="15.831446"
lat="40.131588" lon="15.831304"
lat="40.131523" lon="15.831274"
lat="40.131458" lon="15.831181"
lat="40.131420" lon="15.831067"
lat="40.131325" lon="15.830970"
lat="40.131233" lon="15.830803"
lat="40.131088" lon="15.830819"
lat="40.131023" lon="15.830804"
lat="40.131016" lon="15.830626"
lat="40.131020" lon="15.830546"
lat="40.131023" lon="15.830420"
lat="40.131008" lon="15.830357"
lat="40.130939" lon="15.830152"
lat="40.130798" lon="15.829922"
lat="40.130768" lon="15.829756"
lat="40.130703" lon="15.829603"
lat="40.130653" lon="15.829369"
...
...
...
L'unica cosa ora è come dire nel path di prendere anche l'elevazione. Devo creare un altro oggetto Object result2 = xpath.evaluate..?