需要有关修复RSS提要解析的想法

时间:2011-09-28 04:10:01

标签: java android rss sax

http://www.ibm.com/developerworks/opensource/library/x-android/ 我在这里使用代码,特别是AndroidSaxParser。问题是,我得到的Message对象的所有4个部分与标题相同。我一遍又一遍地梳理它,但我找不到任何错误。 关于在哪里看的任何想法?

以下是代码:

public class AndroidSaxFeedParser extends BaseFeedParser {

public AndroidSaxFeedParser(String feedUrl) {
    super(feedUrl);
}
public List<Message> parse() {
    final Message currentMessage = new Message();
    RootElement root = new RootElement("rss");
    final List<Message> messages = new ArrayList<Message>();
    Element channel = root.getChild("channel");
    Element item = channel.getChild(ITEM);
    item.setEndElementListener(new EndElementListener(){
        public void end() {
            messages.add(currentMessage.copy());
        }
    });
    item.getChild(TITLE).setEndTextElementListener(new EndTextElementListener(){
        public void end(String body) {
            currentMessage.setTitle(body);
        }
    });
    item.getChild(LINK).setEndTextElementListener(new EndTextElementListener(){
        public void end(String body) {
            currentMessage.setLink(body);
        }
    });
    item.getChild(DESCRIPTION).setEndTextElementListener(new EndTextElementListener(){
        public void end(String body) {
            currentMessage.setDescription(body);
        }
    });
    item.getChild(PUB_DATE).setEndTextElementListener(new EndTextElementListener(){
        public void end(String body) {
            currentMessage.setDate(body);
        }
    });
    try {
        Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return messages;
}

}

公共抽象类BaseFeedParser实现了FeedParser {

// names of the XML tags
static final String PUB_DATE = "pubDate";
static final  String DESCRIPTION = "description";
static final  String LINK = "link";
static final  String TITLE = "title";
static final  String ITEM = "item";
static final String CHANNEL = "channel";

final URL feedUrl;

protected BaseFeedParser(String feedUrl){
    try {
        this.feedUrl = new URL(feedUrl);
    } catch (MalformedURLException e) {
        throw new RuntimeException(e);
    }
}

protected InputStream getInputStream() {
    try {
        return feedUrl.openConnection().getInputStream();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

}

0 个答案:

没有答案