package org.developerworks.android; import java.util.ArrayList; import java.util.List; import android.sax.Element; import android.sax.EndElementListener; import android.sax.EndTextElementListener; import android.sax.RootElement; import android.sax.StartElementListener; import android.util.Xml; import org.xml.sax.Attributes; public class AndroidSaxFeedParser extends BaseFeedParser { static final String RSS = "rss"; public AndroidSaxFeedParser(String feedUrl, String rssContent) { super(feedUrl, rssContent); } 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); } }); // Added enclosure parsing item.getChild(ENCLOSURE).setStartElementListener(new StartElementListener() { @Override public void start(Attributes attributes) { currentMessage.setEnclosureUrl(attributes.getValue("url")); currentMessage.setEnclosureLength(attributes.getValue("length")); } }); item.getChild(GUID).setEndTextElementListener(new EndTextElementListener(){ public void end(String body) { currentMessage.setGuId(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()); Xml.parse(this.getRssContentInputStream(), Xml.Encoding.UTF_8, root.getContentHandler()); } catch (Exception e) { throw new RuntimeException(e); } return messages; } }