I want to parse xml from this rss feed, but I just get things like this:
"New Arrivals
Last updated:May 28 6:45PM"
I don't have enough reputation so I can just post words instead of an image. Please excuse me.
I am really a fresh man in Android, so I copied the code from this website and make some changes to parse the above xml data. I read others' questions and think that the problem is about the "channel" tag, but after some modification, nothing changed. Here is the core code:
private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
List<Entry> entries = new ArrayList<Entry>();
parser.require(XmlPullParser.START_TAG, ns, "rss");
parser.next();//I add this statement to pass the channel tag but it doesn't work
while (parser.next() != XmlPullParser.END_TAG) {
String name = parser.getName();
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
// Starts by looking for the entry tag
if (name.equals("item")) {
entries.add(readEntry(parser));
} else {
skip(parser);
}
}
return entries;
}
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "item");
String title = null;
String description = null;
String link = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("title")) {
title = readTitle(parser);
} else if (name.equals("description")) {
description = readDescription(parser);
} else if (name.equals("link")) {
link = readLink(parser);
} else {
skip(parser);
}
}
return new Entry(title, description, link);
}
I'll appreciate it if anyone could help.
The problem is in the method readFeed
, and it should be:
private List<Item> readFeed(XmlPullParser parser) throws IOException, XmlPullParserException {
List<Item> items = new ArrayList();
parser.require(XmlPullParser.START_TAG, null, "rss"); // first start tag begin with <rss>
parser.nextTag();
parser.require(XmlPullParser.START_TAG, null, "channel");// second is <channel>
while (parser.next() != XmlPullParser.END_TAG) { // if encounter </channel>, stop
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
Log.d(TAG, "start tag: " + name);
// Starts by looking for the item tag
if (name.equals("item")) {
items.add(readItem(parser));
} else {
skipTag(parser);
}
}
return items;
}