Android中的XmlPullParser

时间:2013-05-28 19:14:34

标签: android xmlpullparser

我想从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);
}

如果有人能提供帮助我会很感激。

1 个答案:

答案 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;
}