我想从this rss feed解析xml,但我只是得到这样的东西:
“新来港定居人士
上次更新时间:5月28日下午6:45“
我没有足够的声誉所以我可以发布单词而不是图像。请原谅。
我真的是Android中的新手,所以我从this网站复制了代码并进行了一些更改以解析上面的xml数据。我读了别人的问题并认为问题是关于“频道”标签,但经过一些修改后,没有任何改变。以下是核心代码:
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);
}
如果有人能提供帮助我会很感激。
答案 0 :(得分:0)
问题出在方法readFeed
中,应该是:
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;
}