0

我想从这个 rss 提要解析 xml ,但我只是得到这样的东西:

“新来的

最后更新时间:5 月 28 日下午 6:45"

我没有足够的声誉,所以我只能发布文字而不是图片。请原谅我。

我真的是一个Android新手,所以我从这个网站复制了代码并进行了一些更改以解析上述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);
}

如果有人可以提供帮助,我将不胜感激。

4

1 回答 1

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;
}
于 2019-03-24T02:52:01.690 回答