I followed a tutorial to learn to parse the data from the gpx file (which is in my raw folder), and for some reason no data is getting parsed into the NodeList. Here is my XMLParser class
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 "";
}
}
Here is how I am attempting to use the class to parse the file:
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.");
}
}
and the GPX file was exported from the application "MyTracks."
I get no errors, but my message that states "XML Parsing error. No data in nodelist." is displayed.