Parsing xml files locally from assets folder using XmlPullParser
- by Randolphg
Im trying to parse a local xml file that I place in my assets folder. I've been trying to do this for almost a week now.
Here is my test xml file
Test1
Test2
Test3
Test4
Test5
I keep getting the same error:
W/System.err(22458): org.xmlpull.v1.XmlPullParserException: unexpected type (position:TEXT
Code:
public void xmlParser() throws XmlPullParserException, IOException,
ParserConfigurationException, SAXException {
Log.d("tag", "xmlParsing....");
Arithmetic arthm = new Arithmetic();
XmlPullParserFactory xmlPF = XmlPullParserFactory.newInstance();
xmlPF.setValidating(false);
XmlPullParser xml = xmlPF.newPullParser();
InputStream raw = getApplication().getAssets().open("menu.xml");
xml.setInput(raw, null);
xml.nextTag();
Log.d("tag", "start parsing....");
String elementText = null;
String elemName = null;
int nofTags = 0;
while (xml.getEventType() != XmlPullParser.END_DOCUMENT) {
Log.d("tag", "while(xml.next)...");
switch (xml.getEventType()) {
case XmlPullParser.START_DOCUMENT:
Log.d("tag",
"while (xml.getEventType() != XmlPullParser.END_DOCUMENT)");
break;
case XmlPullParser.START_TAG:
Log.d("tag", " case XmlPullParser.START_TAG");
elementText = xml.getName();
Log.d("tag", "elementText = " + elementText);
if (xml.getEventType() != XmlPullParser.END_TAG) {
xml.nextTag();
}
break;
case XmlPullParser.TEXT:
Log.d("tag", "case TEXT");
if (elementText.equals("menu") && xml.isWhitespace()) {
Log.d("tag", "<" + elementText + ">");
arthm.menu_name = xml.getText();
Log.d("tag", "value " + xml.getText() + " added");
} else if (elementText.equals("item")) {
arthm.description = xml.getText();
Log.d("tag", "value " + xml.getText() + " added");
} else if (elementText.equals("SUBCATEGORY NAME")) {
arthm.subcategoryDesc.add(xml.getText());
Log.d("tag", "value " + xml.getText() + " added");
} else if (elementText.equals("SUBCATEGORY DESC")) {
arthm.subcategoryName.add(xml.getText());
Log.d("tag", "value " + xml.getText() + " added");
}
break;
case XmlPullParser.END_TAG:
Log.d("tag", "case END_TAG");
nofTags += 1;
String tags = Integer.toString(nofTags);
Log.d("tags", elementText + " number of tags" + tags);
if (xml.nextTag() != XmlPullParser.START_TAG) {
xml.next();
}
break;
case XmlPullParser.END_DOCUMENT:
Log.d("tag", "case END_DOCUMENT");
break;
default:
break;
}
}
Log.d("tag", "Success!");
}
Thanks in advance.